如何在 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); } }