如何在 JavaFX 中旋转节点?
javafxobject oriented programmingprogramming更新于 2026/1/7 21:32:17
如果在 XY 平面上围绕一个固定点以一定角度移动一个对象,则称为旋转。
在 JavaFX 中,使用 javafx.scene.transform.Rotate 类的对象,可以旋转节点。该类内部围绕给定的固定点旋转节点的坐标空间,使节点看起来像是旋转了一样。
该类包含五个属性 −
angle 属性(双精度型)指定旋转角度。您可以使用 setAngle() 方法设置此属性的值。
axis 属性(Point3D)指定旋转轴。您可以使用 setAxis() 方法设置此属性的值。
pivotX 属性(双精度型)指定枢轴点的 x 坐标。您可以使用 setPivotX() 方法设置此属性的值。
pivotY 属性(双精度型)指定枢轴点的 y 坐标。您可以使用 setPivotY() 方法设置此属性的值。
pivotZ 属性(双精度型)指定枢轴点的 z 坐标。您可以使用 setPivotZ() 方法设置此属性的值。
JavaFX 中的每个节点都包含一个可观察列表,用于保存要应用于该节点的所有变换。您可以使用 getTransforms() 方法获取此列表。
在 JavaFX 中旋转节点 −
实例化 Rotate 类。
使用 setter 方法设置角度和枢轴点。
使用 getTransforms() 方法从节点(要旋转的节点)获取变换列表。
将上面创建的旋转对象添加到该节点。
将节点添加到场景。
示例
以下 JavaFX 示例演示了旋转变换。它包含一个 2D 几何形状和一个滑块,用于表示角度值。如果移动滑块,对象将会旋转。
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
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.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
public class RotationExample extends Application {
public void start(Stage stage) {
//创建矩形
Rectangle rect = new Rectangle(300, 100, 75, 75);
rect.setFill(Color.BLUEVIOLET);
rect.setStrokeWidth(5.0);
rect.setStroke(Color.BROWN);
//设置滑块
Slider slider = new Slider(0, 360, 0);
slider.setShowTickLabels(true);
slider.setShowTickMarks(true);
slider.setMajorTickUnit(90);
slider.setBlockIncrement(10);
slider.setOrientation(Orientation.VERTICAL);
slider.setLayoutX(2);
slider.setLayoutY(195);
//创建旋转变换
Rotate rotate = new Rotate();
//设置旋转的枢轴点
rotate.setPivotX(300);
rotate.setPivotY(100);
//将变换添加到矩形
rect.getTransforms().addAll(rotate);
//将变换链接到滑块
slider.valueProperty().addListener(new ChangeListener<Number>() {
public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
//Setting the angle for the rotation
rotate.setAngle((double) newValue);
}
});
//为圆形添加变换
rect.getTransforms().add(rotate);
//创建窗格
BorderPane pane = new BorderPane();
pane.setRight(new VBox(new Label("Rotate"), slider));
pane.setCenter(rect);
//准备场景
Scene scene = new Scene(pane, 600, 300);
stage.setTitle("Rotation Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
输出


