JavaFX 中的縮放變換是什麼?


縮放變換是指縮小或放大物件的大小。在 JavaFX 中,您可以使用 **javafx.scene.transform.Translate** 類的物件來縮放節點。在內部,此類將座標系中的每個單位乘以給定的因子。

此類包含六個(double)型別的屬性:

  • 三個 (pivotZ、pivotY、pivotZ) 指定樞軸點的 x、y、z 座標(縮放圍繞該點進行)。您可以分別使用 **setPivotX()**、**setPivotY()** 和 **setPivotZ()** 方法為這些屬性設定值。

  • 三個屬性指定沿 x、y 和 z 軸的縮放因子。您可以分別使用 **setX()**、**setY()** 和 **setZ()** 方法為這些屬性設定值。

JavaFX 中的每個節點都包含一個可觀察列表,用於儲存要應用於節點的所有變換。您可以使用 **getTransforms()** 方法獲取此列表。

要縮放節點,請執行以下操作:

  • 例項化 **Scale** 類。

  • 使用相應的 setter 方法設定縮放因子和樞軸點。

  • 使用 **getTransforms()** 方法獲取要移動的節點的變換列表。

  • 將上面建立的縮放物件新增到其中。

  • 將節點新增到場景中。

示例

以下 JavaFX 示例演示了縮放變換。它包含一個二維幾何圖形和兩個滑塊,分別表示 x 和 y 縮放值。如果移動滑塊,則物件會沿選定的軸縮放。

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.paint.PhongMaterial;
import javafx.scene.shape.CullFace;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.Sphere;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;
public class ScalingExample extends Application {
   double x, y;
   public void start(Stage stage) {
      //Drawing a Sphere
      Sphere sphere = new Sphere();
      sphere.setRadius(50.0);
      //Setting other properties
      sphere.setCullFace(CullFace.BACK);
      sphere.setDrawMode(DrawMode.FILL);
      PhongMaterial material = new PhongMaterial();
      material.setDiffuseColor(Color.BROWN);
      sphere.setMaterial(material);
      //Creating the scale transformation
      Scale scale = new Scale();
      //Setting the slider for the horizontal translation
      Slider slider1 = new Slider(0, 2.5, 1);
      slider1.setOrientation(Orientation.VERTICAL);
      slider1.setShowTickLabels(true);
      slider1.setShowTickMarks(true);
      slider1.setMajorTickUnit(0.5);
      slider1.setBlockIncrement(0.1);
      slider1.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            scale.setX((double) newValue);
         }
      });
      //Setting the slider for the vertical translation
      Slider slider2 = new Slider(0, 2.5, 1);
      slider2.setOrientation(Orientation.VERTICAL);
      slider2.setShowTickLabels(true);
      slider2.setShowTickMarks(true);
      slider2.setMajorTickUnit(0.5);
      slider2.setBlockIncrement(0.1);
      slider2.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            scale.setY((double) newValue);
         }
      });
      //Adding the scale transformation to the sphere
      sphere.getTransforms().add(scale);
      //Creating the pane
      BorderPane pane = new BorderPane();
      pane.setLeft(new VBox(new Label("scale: X-Axis"), slider1));
      pane.setRight(new VBox(new Label("scale: Y-Axis"), slider2));
      pane.setCenter(sphere);
      //Preparing the scene
      Scene scene = new Scene(pane, 595, 250);
      stage.setTitle("Scale Example");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

輸出

更新於: 2020年5月19日

304 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.