JavaFX 示例,在節點上運用多種轉換


變換是指 XY 平面的節點中的變化。JavaFX 支援四項基本轉換,即:-

  • 縮放 - 增大或縮小。

  • 旋轉 - 節點座標圍繞固定點移動,並改變角度。

  • 平移 - 節點在 XY 平面中移動。

  • 剪下 - 物體在固定方向上的位移,使它的形狀傾斜。

JavaFX 中的每個節點都包含一個可觀察列表,用於儲存要對節點施加的所有變換。你可以使用 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.scene.transform.Scale;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class MultipleTransformations 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);
      //Creating Rotate transformation
      Slider slider1 = new Slider(0, 360, 0);
      Rotate rotate = new Rotate();
      //Setting pivot points for the rotation
      rotate.setPivotX(rect.getX());
      rotate.setPivotY(rect.getY());
      //Setting slider for rotation
      slider1.setShowTickLabels(true);
      slider1.setShowTickMarks(true);
      slider1.setMajorTickUnit(90);
      slider1.setBlockIncrement(10);
      slider1.setOrientation(Orientation.VERTICAL);
      slider1.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);
         }
      });
      //Creating the translation transformation
      Translate translate = new Translate();
      //Setting the slider for the translation
      Slider slider2 = new Slider(0, 200, 0);
      slider2.setOrientation(Orientation.VERTICAL);
      slider2.setShowTickLabels(true);
      slider2.setShowTickMarks(true);
      slider2.setMajorTickUnit(50);
      slider2.setBlockIncrement(50);
      slider2.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            translate.setX(25);
            translate.setY((double) newValue);
            translate.setZ(100);
         }
      });
      //Creating the Scale transformation
      Scale scale = new Scale();
      scale.setPivotX(rect.getX());
      scale.setPivotY(rect.getY());
      //Setting the slider for the horizontal translation
      Slider slider3 = new Slider(0, 2.5, 1);
      slider3.setShowTickLabels(true);
      slider3.setShowTickMarks(true);
      slider3.setMajorTickUnit(0.5);
      slider3.setBlockIncrement(0.1);
      slider3.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            scale.setX((double) newValue);
            scale.setY((double) newValue);
         }
      });
      //Adding all the transformations to the node
      rect.getTransforms().addAll(translate, rotate, scale);
      //Creating the pane
      BorderPane pane = new BorderPane();
      pane.setRight(new VBox(new Label("Rotate"), slider1));
      pane.setCenter(rect);
      pane.setBottom(new VBox(new Label("Translate (Y axis)"), slider2));
      pane.setLeft(new VBox(new Label("Scale"), slider3));
      //Preparing the scene
      Scene scene = new Scene(pane, 595, 300);
      stage.setTitle("Multiple Transformations");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

輸出

更新於:2020年5月19日

175 次觀看

開啟你的 職業生涯

完成課程,獲得認證

開始吧
廣告
© . All rights reserved.