如何在 JavaFX 中移動(平移)一個節點到另一個位置?
如果在 XY 平面上將一個物件從一個位置移動到另一個位置,則稱為平移。您可以沿著 X 軸或 Y 軸平移物件。
在 JavaFX 中,使用 **javafx.scene.transform.Translate** 類的物件,您可以將節點從一個位置平移到另一個位置。此類包含三個屬性(double),分別表示目標位置相對於原始位置在 X、Y、Z 平面上的距離。
JavaFX 中的每個節點都包含一個可觀察列表,用於儲存要應用於節點的所有轉換。您可以使用 **getTransforms()** 方法獲取此列表。
要將節點從一個位置移動到另一個位置 -
例項化 **Translate** 類。
使用 **setX()**、**setY()** 和 **setZ()** 方法分別設定您希望在 XYZ 平面上移動節點的距離。
使用 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.Translate; import javafx.stage.Stage; public class TranslateExample extends Application { public void start(Stage stage) { //Drawing a Sphere Sphere sphere = new Sphere(); sphere.setRadius(50.0); sphere.setCullFace(CullFace.BACK); sphere.setDrawMode(DrawMode.FILL); PhongMaterial material = new PhongMaterial(); material.setDiffuseColor(Color.BROWN); sphere.setMaterial(material); //Setting the slider for the horizontal translation Slider slider1 = new Slider(0, 500, 0); slider1.setOrientation(Orientation.VERTICAL); slider1.setShowTickLabels(true); slider1.setShowTickMarks(true); slider1.setMajorTickUnit(150); slider1.setBlockIncrement(150); //Creating the translation transformation Translate translate = new Translate(); //Linking the transformation to the slider slider1.valueProperty().addListener(new ChangeListener<Number>() { public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){ translate.setX((double) newValue); translate.setY(0); translate.setZ(0); } }); //Setting the slider for the vertical translation Slider slider2 = new Slider(0, 200, 0); slider2.setOrientation(Orientation.VERTICAL); slider2.setShowTickLabels(true); slider2.setShowTickMarks(true); slider2.setMajorTickUnit(50); slider2.setBlockIncrement(50); //Creating the translation transformation slider2.valueProperty().addListener(new ChangeListener<Number>() { public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){ translate.setX(0); translate.setY((double) newValue); } }); //Adding the transformation to the sphere sphere.getTransforms().add(translate); //Creating the pane BorderPane pane = new BorderPane(); pane.setBottom(new VBox(new Label("Translate along X-Axis"), slider1)); pane.setRight(new VBox(new Label("Translate along Y-Axis"), slider2)); pane.setLeft(sphere); //Preparing the scene Scene scene = new Scene(pane, 595, 300); stage.setTitle("Translate Example"); stage.setScene(scene); stage.show(); } public static void main(String args[]){ launch(args); } }
輸出
廣告