如果将XY平面上的对象从一个位置移动到另一位置,则称为平移。您可以沿X轴到Y轴平移对象。
在JavaFX中,使用javafx.scene.transform.Translate类的对象可以将节点从一个位置转换到另一个位置。此类包含三个属性(双精度),分别表示所需位置与原始位置沿X,Y,Z平面的距离。
JavaFX中的每个节点都包含一个可观察的列表,以保存要应用于节点上的所有转换。您可以使用getTransforms()方法获取此列表。
要将节点从一个位置移动到另一位置-
实例化Translate类。
分别使用setX()setY()
和setZ()方法设置要在XYZ平面中移动节点的距离。
使用getTransforms()
方法从节点(要移动的节点)获取转换列表。
向其添加上面创建的比例对象。
将节点添加到场景。
以下JavaFX示例演示了转换转换。它包含2D几何形状和两个滑块,分别表示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) { //绘制球体 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); //设置水平移动的滑块 Slider slider1 = new Slider(0, 500, 0); slider1.setOrientation(Orientation.VERTICAL); slider1.setShowTickLabels(true); slider1.setShowTickMarks(true); slider1.setMajorTickUnit(150); slider1.setBlockIncrement(150); //创建翻译转换 Translate translate = new Translate(); //将转换链接到滑块 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); } }); //设置垂直移动的滑块 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(0); translate.setY((double) newValue); } }); //将变换添加到球体 sphere.getTransforms().add(translate); //创建窗格 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); //准备场景 Scene scene = new Scene(pane, 595, 300); stage.setTitle("Translate Example"); stage.setScene(scene); stage.show(); } public static void main(String args[]){ launch(args); } }
输出结果