Javafx 简明教程
JavaFX - Transformations
变换只不过是通过应用一些规则将图形变成其他东西。这些规则使你可以应用各种类型的变换,如保持对象的形状改变其位置、基于角度旋转对象、改变对象的大小等。
使用 JavaFX,你可以对单个节点或节点组应用变换。你还可以一次对 JavaFX 节点应用一种类型的变换或多种变换。所有这些变换都由各种类表示,这些类都是 Transform 类的子类,它们属于 javafx.scene.transform 包。
S.No |
Transformation & Description |
1 |
Rotation 在旋转中,我们从其原点 θ (theta) 以特定角度旋转对象。 |
2 |
Scaling 若要改变对象的尺寸,可以使用缩放变换。 |
3 |
Translation 将对象移动到屏幕上的不同位置。 |
4 |
Shearing 一种对对象的形状进行倾斜的变换称为剪切变换。 |
Transform 类对 JavaFX 节点实现了仿射变换。仿射变换只不过是保留对象中点、直线和这些直线的平行性在输出对象中的类型的变换。可以使用 Affine 来将这些变换应用到 JavaFX 节点上,它扩展了 Transform 类。
Multiple Transformations
你可以在 JavaFX 中通过两种方式对节点应用多个变换。你可以一次应用一个变换,或将多个变换组合在一起并一次应用它们。以下程序是一个示例,它同时在矩形上执行 Rotation, Scaling 和 Translation 变换。
将此代码保存在一个名为 − 的文件中
MultipleTransformationsExample.java 。
Example
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class MultipleTransformationsExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Rectangle
Rectangle rectangle = new Rectangle(50, 50, 100, 75);
//Setting the color of the rectangle
rectangle.setFill(Color.BURLYWOOD);
//Setting the stroke color of the rectangle
rectangle.setStroke(Color.BLACK);
//creating the rotation transformation
Rotate rotate = new Rotate();
//Setting the angle for the rotation
rotate.setAngle(20);
//Setting pivot points for the rotation
rotate.setPivotX(150);
rotate.setPivotY(225);
//Creating the scale transformation
Scale scale = new Scale();
//Setting the dimensions for the transformation
scale.setX(1.5);
scale.setY(1.5);
//Setting the pivot point for the transformation
scale.setPivotX(300);
scale.setPivotY(135);
//Creating the translation transformation
Translate translate = new Translate();
//Setting the X,Y,Z coordinates to apply the translation
translate.setX(250);
translate.setY(0);
translate.setZ(0);
//Adding all the transformations to the rectangle
rectangle.getTransforms().addAll(rotate, scale, translate);
//Creating a Group object
Group root = new Group(rectangle);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Multiple transformations");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
使用以下命令,从命令提示符编译并执行已保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls MultipleTransformationsExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls MultipleTransformationsExample
执行后,上述程序会生成如下所示的 JavaFX 窗口。
Transformations on 3D Objects
JavaFX 允许你沿三个坐标执行变换。然而,若要显示具有 3 个维度(长度、宽度和深度)的对象,JavaFX 使用一个名为 Z 缓冲区的概念。
如果你想要创建一个 3D 效果变换,请将所有三个坐标 x、y 和 z 连同 x 轴和 y 轴指定给变换构造函数。此外,为了能够在 JavaFX 中看到三维物体和变换效果,用户必须启用透视相机。
Example
以下是一个旋转和转换三维框的示例。
将此代码保存在名为 RotationExample3D.java 的文件中。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
public class RotationExample3D extends Application {
@Override
public void start(Stage stage) {
//Drawing a Box
Box box = new Box();
//Setting the properties of the Box
box.setWidth(150.0);
box.setHeight(150.0);
box.setDepth(150.0);
//Creating the translation transformation
Translate translate = new Translate();
translate.setX(400);
translate.setY(150);
translate.setZ(25);
Rotate rxBox = new Rotate(0, 0, 0, 0, Rotate.X_AXIS);
Rotate ryBox = new Rotate(0, 0, 0, 0, Rotate.Y_AXIS);
Rotate rzBox = new Rotate(0, 0, 0, 0, Rotate.Z_AXIS);
rxBox.setAngle(30);
ryBox.setAngle(50);
rzBox.setAngle(30);
box.getTransforms().addAll(translate,rxBox, ryBox, rzBox);
//Creating a Group object
Group root = new Group(box);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing a cylinder");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
使用以下命令,从命令提示符编译并执行已保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls RotationExample3D.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls RotationExample3D
执行后,上述程序会生成如下所示的 JavaFX 窗口。