如何在 JavaFX 中更改滑块的方向?

javafxobject oriented programmingprogramming更新于 2025/4/14 1:37:17

JavaFX 提供了一个名为 Slider 的类,它表示显示连续值范围的滑块组件。它包含一个显示数值的轨道。沿着轨道,有一个指向数字的滑块。您可以提供滑块的最大值、最小值和初始值。

在 JavaFx 中,您可以通过实例化 javafx.scene.control.Slider 类来创建滑块。

更改滑块的方向

JavaFX 滑块默认可以是垂直的也可以是水平的,实例化 Slider 类时会创建一个水平滑块。orientation 属性指定当前滑块的方向,即水平或垂直。您可以使用 setOrientation() 方法设置此属性的值。

您可以将以下两个常量之一作为参数 − 传递给此方法

  • Orientation.VERTICAL

  • Orientation.HORIZONTAL

因此,要更改滑块的方向,您需要调用 setOrientation 方法,并绕过上述两个值之一作为参数。

示例

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.Sphere;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
public class SliderOrientation extends Application {
   public void start(Stage stage) {
      //绘制球体
      Sphere sphere = new Sphere();
      sphere.setRadius(75.0);
      sphere.setDrawMode(DrawMode.LINE);
      //创建用于旋转的滑块
      Slider slider1 = new Slider(0, 360, 0);
      //将其方向设置为垂直
      slider1.setOrientation(Orientation.VERTICAL);
      slider1.setShowTickLabels(true);
      slider1.setShowTickMarks(true);
      slider1.setMajorTickUnit(90);
      slider1.setBlockIncrement(10);
      Rotate rotate = new Rotate();
      slider1.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            //设置旋转角度
            rotate.setAngle((double) newValue);
         }
      });
      //创建用于缩放的滑块
      Slider slider2 = new Slider(0.3, 2.1, 0.6);
      //将其方向设置为水平
      slider2.setOrientation(Orientation.HORIZONTAL);
      slider2.setShowTickLabels(true);
      slider2.setShowTickMarks(true);
      slider2.setMajorTickUnit(0.5);
      slider2.setBlockIncrement(0.1);
      Scale scale = new Scale();
      slider2.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            scale.setX((double) newValue);
            scale.setY((double) newValue);
         }
      });
      //将所有变换添加到节点
      sphere.getTransforms().addAll(rotate, scale);
      //创建窗格
      BorderPane pane = new BorderPane();
      pane.setRight(new VBox(new Label("Rotate"), slider1));
      pane.setCenter(sphere);
      pane.setLeft(new VBox(new Label("Scale"), slider2));
      pane.setPadding(new Insets(10, 10, 10, 10));
      //准备场景
      Scene scene = new Scene(pane, 595, 330);
      stage.setTitle("Slider Orientation");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

输出


相关文章