JavaFX中的规模转换是什么?

比例变换是指最小化或最大化对象的大小。在JavaFX中,可以使用javafx.scene.transform.Translate类的对象来缩放节点。在内部,该类将坐标系中的每个单位与给定因子相乘。

此类包含六个属性(双精度)类型-

  • 三个(pivotZ,pivotY,pivotZ)指定了枢轴点(围绕其发生缩放)的x,y,z坐标。您可以分别使用setPivotX(),setPivotY()setPivotZ()方法将值设置为这些属性。

  • 三个属性指定沿x,y和z轴的比例因子。您可以分别使用setX(),setY()setZ()方法将值设置为这些属性。

JavaFX中的每个节点都包含一个可观察的列表,以保存要在节点上应用的所有转换。您可以使用getTransforms()方法获取此列表。

缩放节点-

  • 实例化Scale类。

  • 使用相应的设置器方法设置比例因子和枢轴点。

  • 使用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.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);
   }
}

输出结果