Javafx 简明教程
JavaFX - Path Objects
在之前的 2D 形状章节中,我们已经了解到如何通过实例化类并设置相应参数来绘制一些简单的预定义形状。
In the previous 2D shapes chapters, we have seen how to draw some simple predefined shapes by instantiating classes and setting respective parameters.
但是,仅仅这些预定义的形状并不能构建除 javafx.shape package 提供的基元之外的更复杂形状。
But, just these predefined shapes are not sufficient to build more complex shapes other than the primitives provided by the javafx.shape package.
例如,如果您想要绘制如下面的图表所示的图形元素,那么您不能依赖这些简单的形状。即使您成功地使用“Line”形状构建了它,但程序也会变得非常复杂且低效。
For example, if you want to draw a graphical element as shown in the following diagram, you cannot rely on those simple shapes. Even if you succeed constructing it using the Line shapes, the program becomes way to complex and inefficient.
为了提高效率,JavaFX 引入了一个称为“路径”的概念,其中多个边连接一系列顶点。
To make this efficient, JavaFX introduced a concept called Path where a multiple edges that join a sequence of vertices together.
The Path Class
为了绘制这种复杂结构,JavaFX 提供了一个名为 Path 的类。此类表示形状的几何轮廓。
To draw such complex structures JavaFX provides a class named Path. This class represents the geometrical outline of a shape.
它附加到一个可观察列表,其中包含各种 Path Elements ,如 moveTo、LineTo、HlineTo、VlineTo、ArcTo、QuadCurveTo、CubicCurveTo。
It is attached to an observable list which holds various Path Elements such as moveTo, LineTo, HlineTo, VlineTo, ArcTo, QuadCurveTo, CubicCurveTo.
在实例化时,此类基于给定的路径元素构造一个路径。
On instantiating, this class constructs a path based on the given path elements.
您可以在实例化此类时向其传递路径元素,如下所示:
You can pass the path elements to this class while instantiating it as follows−
Path myshape = new Path(pathElement1, pathElement2, pathElement3);
或者,您可以获取可观察列表,并使用 addAll() 方法添加所有路径元素,如下所示:
Or, you can get the observable list and add all the path elements using addAll() method as follows −
Path myshape = new Path();
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3);
您还可以使用 add() 方法逐个添加元素,如下所示:
You can also add elements individually using the add() method as −
Path myshape = new Path();
myshape.getElements().add(pathElement1);
The Move to Path Element
路径元素 MoveTo 用于将路径的当前位置移动到指定点。它通常用于设置使用路径元素绘制的形状的起点。
The Path Element MoveTo is used to move the current position of the path to a specified point. It is generally used to set the starting point of a shape drawn using the path elements.
它由包 javafx.scene.shape 中名为 LineTo 的类表示。它具有双精度数据类型2个属性,即:_
It is represented by a class named LineTo of the package javafx.scene.shape. It has 2 properties of the double datatype namely −
-
X − The x coordinate of the point to which a line is to be drawn from the current position.
-
Y − The y coordinate of the point to which a line is to be drawn from the current position.
您可以通过实例化MoveTo类并传递新点的x、y坐标来创建移动到路径元素,如下所示:_
You can create a move to path element by instantiating the MoveTo class and passing the x, y coordinates of the new point as follows −
MoveTo moveTo = new MoveTo(x, y);
如果您不向构造函数传递任何值,则新点将被设置为(0,0)。
If you don’t pass any values to the constructor, then the new point will be set to (0,0).
您还可以使用各自的setter方法设置x,y坐标的值,如下所示:_
You can also set values to the x, y coordinate, using their respective setter methods as follows −
setX(value);
setY(value);
Example - Drawing a Complex Path
在此示例中,我们将展示如何使用 Path, MoveTo 和 Line 类绘制以下形状。
In this example, we will show how to draw the following shape using the Path, MoveTo and Line classes.
将此代码存储在名称为 ComplexShape.java 的文件中。
Save this code in a file with the name ComplexShape.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
public class ComplexShape extends Application {
@Override
public void start(Stage stage) {
//Creating a Path
Path path = new Path();
//Moving to the starting point
MoveTo moveTo = new MoveTo(108, 71);
//Creating 1st line
LineTo line1 = new LineTo(321, 161);
//Creating 2nd line
LineTo line2 = new LineTo(126,232);
//Creating 3rd line
LineTo line3 = new LineTo(232,52);
//Creating 4th line
LineTo line4 = new LineTo(269, 250);
//Creating 4th line
LineTo line5 = new LineTo(108, 71);
//Adding all the elements to the path
path.getElements().add(moveTo);
path.getElements().addAll(line1, line2, line3, line4, line5);
//Creating a Group object
Group root = new Group(path);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing an arc through a path");
//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 文件。
Compile and execute the saved java file from the command prompt using the following commands.
javac --module-path %PATH_TO_FX% --add-modules javafx.controls ComplexShape.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls ComplexShape
Output
执行上述程序时,生成一个 JavaFX 窗口,显示以下输出 −
On executing, the above program generates a JavaFX window displaying the following output −
以下是由JavaFX提供的各种路径元素(类)。这些类存在于包 javafx.shape 中。所有这些类都继承了类 PathElement 。
Following are the various path elements (classes) provided by JavaFX. These classes exist in the package javafx.shape. All these classes inherit the class PathElement.
S.No |
Shape & Description |
1 |
LineToThe path element line is used to draw a straight line to a point in the specified coordinates from the current position. It is represented by a class named LineTo. This class belongs to the package javafx.scene.shape. |
2 |
HlineToThe path element HLineTo is used to draw a horizontal line to a point in the specified coordinates from the current position. It is represented by a class named HLineTo. This class belongs to the package javafx.scene.shape. |
3 |
VLineToThe path element vertical line is used to draw a vertical line to a point in the specified coordinates from the current position. It is represented by a class named VLineTo. This class belongs to the package javafx.scene.shape. |
4 |
QuadCurveToThe path element quadratic curve is used to draw a quadratic curve to a point in the specified coordinates from the current position. It is represented by a class named QuadraticCurveTo. This class belongs to the package javafx.scene.shape. |
5 |
CubicCurveToThe path element cubic curve is used to draw a cubic curve to a point in the specified coordinates from the current position. It is represented by a class named CubicCurveTo. This class belongs to the package javafx.scene.shape. |
6 |
ArcToThe path element Arc is used to draw an arc to a point in the specified coordinates from the current position. It is represented by a class named ArcTo. This class belongs to the package javafx.scene.shape. |