如何在 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