如何在 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);
}
}输出

广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP