Javafx 简明教程

JavaFX - Path Objects

在之前的 2D 形状章节中,我们已经了解到如何通过实例化类并设置相应参数来绘制一些简单的预定义形状。

但是,仅仅这些预定义的形状并不能构建除 javafx.shape package 提供的基元之外的更复杂形状。

例如,如果您想要绘制如下面的图表所示的图形元素,那么您不能依赖这些简单的形状。即使您成功地使用“Line”形状构建了它,但程序也会变得非常复杂且低效。

path class

为了提高效率,JavaFX 引入了一个称为“路径”的概念,其中多个边连接一系列顶点。

The Path Class

为了绘制这种复杂结构,JavaFX 提供了一个名为 Path 的类。此类表示形状的几何轮廓。

它附加到一个可观察列表,其中包含各种 Path Elements ,如 moveTo、LineTo、HlineTo、VlineTo、ArcTo、QuadCurveTo、CubicCurveTo。

在实例化时,此类基于给定的路径元素构造一个路径。

您可以在实例化此类时向其传递路径元素,如下所示:

Path myshape = new Path(pathElement1, pathElement2, pathElement3);

或者,您可以获取可观察列表,并使用 addAll() 方法添加所有路径元素,如下所示:

Path myshape = new Path();
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3);

您还可以使用 add() 方法逐个添加元素,如下所示:

Path myshape = new Path();
myshape.getElements().add(pathElement1);

The Move to Path Element

路径元素 MoveTo 用于将路径的当前位置移动到指定点。它通常用于设置使用路径元素绘制的形状的起点。

它由包 javafx.scene.shape 中名为 LineTo 的类表示。它具有双精度数据类型2个属性,即:_

  1. X − 从当前位置绘制一条线到的点的 x 坐标。

  2. Y − 从当前位置绘制一条线到的点的 y 坐标。

您可以通过实例化MoveTo类并传递新点的x、y坐标来创建移动到路径元素,如下所示:_

MoveTo moveTo = new MoveTo(x, y);

如果您不向构造函数传递任何值,则新点将被设置为(0,0)。

您还可以使用各自的setter方法设置x,y坐标的值,如下所示:_

setX(value);
setY(value);

Example - Drawing a Complex Path

在此示例中,我们将展示如何使用 Path, MoveToLine 类绘制以下形状。

complex path

将此代码存储在名称为 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 文件。

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 窗口,显示以下输出 −

drawing arc through path

以下是由JavaFX提供的各种路径元素(类)。这些类存在于包 javafx.shape 中。所有这些类都继承了类 PathElement

S.No

Shape & Description

1

LineTo 路径元素 line 用于从当前位置绘制一条直线到指定坐标中的一个点。它由名为 LineTo 的类表示。此类属于包 javafx.scene.shape

2

HlineTo 路径元素 HLineTo 用于从当前位置绘制一条水平线到指定坐标中的一个点。它由名为 HLineTo 的类表示。此类属于包 javafx.scene.shape

3

VLineTo 路径元素 vertical line 用于从当前位置绘制一条垂直线到指定坐标中的一个点。它由名为 VLineTo 的类表示。此类属于包 javafx.scene.shape

4

QuadCurveTo 路径元素二次曲线用于从当前位置绘制一条 quadratic curve 到指定坐标中的一个点。它由名为 QuadraticCurveTo 的类表示。此类属于包 javafx.scene.shape

5

CubicCurveTo 路径元素 cubic curve 用于从当前位置绘制一条三次曲线到指定坐标中的一个点。它由名为 CubicCurveTo 的类表示。此类属于包 javafx.scene.shape

6

ArcTo 路径元素 Arc 用于从当前位置绘制一条弧线到指定坐标中的一个点。它由名为 ArcTo 的类表示。此类属于包 javafx.scene.shape