JavaFX 中的缩放变换是什么?
javafxobject oriented programmingprogramming更新于 2026/1/7 22:36:17
缩放变换是指最小化或最大化对象的尺寸。在 JavaFX 中,您可以使用 javafx.scene.transform.Translate 类的对象来缩放节点。在内部,该类将坐标系中的每个单位乘以给定的因子。
此类包含六个属性(双精度型),类型为 −
三个属性(pivotZ、pivotY、pivotZ)分别指定枢轴点(缩放围绕该点进行)的 x、y、z 坐标。您可以分别使用 setPivotX()、setPivotY() 和 setPivotZ() 方法设置这些属性的值。
三个属性分别指定沿 x、y 和 z 轴的缩放因子。您可以分别使用 setX()、setY() 和 setZ() 方法设置这些属性的值。
JavaFX 中的每个节点都包含一个可观察列表,用于保存要应用于该节点的所有变换。您可以使用 getTransforms() 方法获取此列表。
缩放节点 −
实例化 Scale 类。
使用相应的 setter 方法设置缩放因子和枢轴点。
使用 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) {
//绘制球体
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);
//创建缩放变换
Scale scale = new Scale();
//设置水平平移的滑块
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);
}
});
//设置滑块的垂直平移
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() {
public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
scale.setY((double) newValue);
}
});
//为球体添加缩放变换
sphere.getTransforms().add(scale);
//创建窗格
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);
//准备场景
Scene scene = new Scene(pane, 595, 250);
stage.setTitle("Scale Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
输出


