如何在 JavaFX 中旋转节点?
如果在 XY 平面内围绕一个固定点以一定角度移动一个对象,则称为旋转。
在 JavaFX 中,可以使用 **javafx.scene.transform.Rotate** 类的对象来旋转节点。此类在内部围绕给定的固定点旋转节点的坐标空间,这使得节点看起来像旋转了。
此类包含五个属性:
**_angle_** 属性(double)指定旋转角度。可以使用 **setAngle()** 方法为此属性设置值。
**_axis_** 属性 (Point3D) 指定旋转轴。可以使用 **setAxis()** 方法为此属性设置值。
**_pivotX_** 属性(double)指定枢轴点的 x 坐标。可以使用 **setPivotX()** 方法为此属性设置值。
**_pivotY_** 属性(double)指定枢轴点的 y 坐标。可以使用 **setPivotY()** 方法为此属性设置值。
**_pivotZ_** 属性(double)指定枢轴点的 z 坐标。可以使用 **setPivotZ()** 方法为此属性设置值。
JavaFX 中的每个节点都包含一个可观察列表,用于保存要应用于节点的所有变换。可以使用 **getTransforms()** 方法获取此列表。
要在 JavaFX 中旋转节点:
实例化 **_Rotate_** 类。
使用 setter 方法设置角度和枢轴点。
使用 getTransforms() 方法从节点(要旋转的节点)获取变换列表。
将上面创建的旋转对象添加到其中。
将节点添加到场景中。
示例
下面的 JavaFX 示例演示了旋转变换。它包含一个二维几何形状和一个滑块,代表角度值。如果移动滑块,则对象将旋转。
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) {
//Creating a rectangle
Rectangle rect = new Rectangle(300, 100, 75, 75);
rect.setFill(Color.BLUEVIOLET);
rect.setStrokeWidth(5.0);
rect.setStroke(Color.BROWN);
//Setting the slider
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);
//creating the rotation transformation
Rotate rotate = new Rotate();
//Setting pivot points for the rotation
rotate.setPivotX(300);
rotate.setPivotY(100);
//Adding the transformation to rectangle
rect.getTransforms().addAll(rotate);
//Linking the transformation to the slider
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);
}
});
//Adding the transformation to the circle
rect.getTransforms().add(rotate);
//Creating the pane
BorderPane pane = new BorderPane();
pane.setRight(new VBox(new Label("Rotate"), slider));
pane.setCenter(rect);
//Preparing the scene
Scene scene = new Scene(pane, 600, 300);
stage.setTitle("Rotation Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}输出

广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP