JavaFX 中的剪切变换是什么?
javafxobject oriented programmingprogramming更新于 2026/1/7 22:04:17
对象沿固定方向的位移,使其形状倾斜,称为剪切变换。这也称为倾斜。
在 JavaFX 中,使用 javafx.scene.transform.Shear 类的对象,您可以沿所需轴倾斜节点。此类内部会旋转指定的轴,使 X 轴和 Y 轴不再垂直。
此类包含四个属性 −
pivotX 属性(双精度型)指定剪切枢轴点的 x 坐标。您可以使用 setPivotX() 方法设置此属性的值。
pivotY 属性(双精度型)指定剪切枢轴点的 y 坐标。您可以使用 setPivotY() 方法设置此属性的值。
x 属性(双精度型)指定剪切 x 坐标。您可以使用 setX() 方法设置此属性的值。
x 属性(双精度型)指定剪切 y 坐标。您可以使用 setY() 方法设置此属性的值。
JavaFX 中的每个节点都包含一个可观察列表,用于保存要应用于节点的所有变换。您可以使用 getTransforms() 方法获取此列表。
倾斜节点 −
实例化 Shear 类。
使用相应的 setter 方法设置剪切 x(或剪切 y)点和枢轴点(可选)。
使用 getTransforms() 方法从节点(您想要移动的节点)获取变换列表。
将上面创建的剪切对象添加到该节点。
将节点添加到场景。
示例
遵循 JavaFX,示例演示了剪切变换。它包含一个二维几何形状和两个滑块,分别代表 x 和 y 轴的倾斜值。移动滑块时,对象会沿着选定的轴进行倾斜。
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
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.shape.Rectangle;
import javafx.scene.transform.Shear;
import javafx.stage.Stage;
public class ShearExample extends Application {
public void start(Stage stage) {
//创建矩形
Rectangle rect = new Rectangle(300, 100, 75, 75);
rect.setFill(Color.BLUEVIOLET);
rect.setStrokeWidth(5.0);
rect.setStroke(Color.BROWN);
//设置滑块的水平平移
Slider slider1 = new Slider(0, 2, 0);
slider1.setShowTickLabels(true);
slider1.setShowTickMarks(true);
slider1.setMajorTickUnit(0.5);
slider1.setBlockIncrement(0.3);
//创建剪切变换
Shear shear = new Shear();
//设置枢轴点
shear.setPivotX(200);
shear.setPivotY(250);
//设置剪切尺寸
slider1.valueProperty().addListener(new ChangeListener() {
public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
shear.setX((double) newValue);
shear.setY(0.0);
}
});
//设置垂直平移的滑块
Slider slider2 = new Slider(0, 1, 0);
slider2.setShowTickLabels(true);
slider2.setShowTickMarks(true);
slider2.setMajorTickUnit(0.5);
slider2.setBlockIncrement(0.3);
//创建平移变换
slider2.valueProperty().addListener(new ChangeListener() {
public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
shear.setX(0.0);
shear.setY((double) newValue);
}
});
//为球体添加变换
rect.getTransforms().add(shear);
//创建窗格
BorderPane pane = new BorderPane();
pane.setLeft(new VBox(new Label("沿 X 轴剪切"), slider1));
pane.setRight(new VBox(new Label("沿 Y 轴剪切"), slider2));
pane.setCenter(rect);
//准备场景
Scene scene = new Scene(pane, 600, 250);
stage.setTitle("Shear Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
输出


