JavaFX - 路径对象



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

但是,仅这些预定义图形不足以构建比  javafx.shape 包 提供的基本图形更复杂的图形。

例如,如果您想绘制如下所示的图形元素,则不能依赖于这些简单的图形。即使您成功地使用直线图形构建它,程序也会变得过于复杂和低效。

Path Class

为了提高效率,JavaFX 引入了一个名为路径的概念,其中多条边将一系列顶点连接在一起。

Path 类

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

它附加到一个可观察列表,该列表包含各种  路径元素 ,例如 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);

MoveTo 路径元素

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

它由  javafx.scene.shape 包中的  LineTo 类表示。它具有两个双精度数据类型属性:

  • X - 从当前位置绘制直线的点的 x 坐标。

  • Y - 从当前位置绘制直线的点的 y 坐标。

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

MoveTo moveTo = new MoveTo(x, y);

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

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

setX(value); 
setY(value); 

示例 - 绘制复杂的路径

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

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

输出

执行后,上述程序将生成一个 JavaFX 窗口,显示以下输出:

Drawing Arc through Path

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

序号 形状和描述
1 LineTo

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

2 HlineTo

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

3 VLineTo

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

4 QuadCurveTo

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

5 CubicCurveTo

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

6 ArcTo

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

广告