如何将JavaFX节点从一个位置移动(转换)到另一个位置?

如果将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);

   }

}

输出结果


以上是 如何将JavaFX节点从一个位置移动(转换)到另一个位置? 的全部内容, 来源链接: utcz.com/z/359227.html

回到顶部