如何在JavaFX中旋转节点?

此类包含五个属性-

  • 属性(双)指定旋转角度。您可以使用setAngle()方法将值设置为此属性。

  • 属性(三维点)指定旋转轴线。您可以使用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){
            //设置旋转角度
            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);
   }
}

输出结果