Javafx 简明教程

JavaFX - LineTo Path Object

在几何中,线是最基本的图形之一,可以用不同的方式与其他图形结合以创建更复杂的结构。例如,多边形是一个由若干条线组成的封闭式几何图形。在 JavaFX 中,使用基本二维形状线来构建如此复杂的图形非常繁琐。因此,我们使用路径对象在二维平面上从一个位置绘制一条线到另一个位置。

使用 Path 类,我们可以从一个位置在平面上绘制一个 2D 形状到另一个位置以创建一个路径对象。之前,我们见过通过随意使用 2D 形状构建复杂图形的方式,比如奥运会符号、房子等。在本章中,我们将学习如何使用路径构造这种复杂图形。

JavaFX Path Object LineTo

路径元素 line 用于从当前位置绘制一条直线到指定坐标中的点。

它由一个名为 LineTo 的类表示。此类属于包 javafx.scene.shape

此类有 2 个 double 数据类型的属性:

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

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

要绘制一条线,需要向这些属性传递值。这可以通过在实例化时按相同顺序将它们传递给此类的构造函数来完成。也可以通过使用它们各自的 setter 方法来完成。

Steps to draw PathElement Line

若要从 JavaFX 中的当前位置绘制一条线到指定点,请遵循以下步骤。

Step 1: Creating a Path Class Object

创建 Java 类并继承包 javafx.applicationApplication 类,并在该类中实现 start() 方法。然后,按照以下方式在其中创建一个路径类对象。

public class ClassName extends Application {
   @Override
   public void start(Stage primaryStage) throws Exception {
      //Creating a Path object
      Path path = new Path();
   }
}

Step 2: Setting the Path

创建 MoveTo 路径元素,并将 XY 坐标设置为线的起点坐标 (100, 150)。这可以使用 MoveTo 类的 setX()setY() 方法来完成,如下所示。

//Moving to the starting point
MoveTo moveTo = new MoveTo();
moveTo.setX(100.0f);
moveTo.setY(150.0f);

Step 3: Creating an Object of the Class LineTo

通过实例化属于包 javafx.scene.shape 的名为 LineTo 的类,创建路径元素线,如下所示。

//Creating an object of the class LineTo
LineTo lineTo = new LineTo();

Step 4: Setting Properties to the Line Element

指定要从当前位置绘制线的点的坐标。这可以通过使用它们各自的设置器方法设置 x 和 y 属性来完成,如下面的代码块所示。

//Setting the Properties of the line element
lineTo.setX(500.0f);
lineTo.setY(150.0f);

Step 5: Adding Elements to the Observable List of the Path Class

将前面的步骤中创建的路径元素 MoveToLineTo 添加到 Path 类的可观察列表中,如下所示 −

//Adding the path elements to Observable list of the Path class
path.getElements().add(moveTo);
path.getElements().add(lineTo);

Step 6: Launching Application

一旦创建了 LineTo 路径对象,请按照以下给定的步骤正确启动应用程序 −

  1. 首先,通过将组对象作为其构造函数的参数值传递来实例化名为 Scene 的类。你也可以将应用程序屏幕的尺寸作为可选参数传递给此构造函数。

  2. 然后,使用 Stage 类的 setTitle() 方法设置阶段标题。

  3. 现在,使用名为 Stage 的类的 setScene() 方法将 Scene 对象添加到阶段。

  4. 使用名为 show() 的方法显示场景的内容。

  5. 最后,借助 launch() 方法启动应用程序。

Example 1

下面的程序展示了如何使用 JavaFX 的 Path 类从当前点绘制一条直线到指定位置。将此代码保存在一个名为 LineToExample.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;

public class LineToExample extends Application {
   @Override
   public void start(Stage stage) {
      //Creating a Path object
      Path path = new Path();

      //Moving to the starting point
      MoveTo moveTo = new MoveTo();
      moveTo.setX(100.0f);
      moveTo.setY(150.0f);

      //Instantiating the LineTo class
      LineTo lineTo = new LineTo();

      //Setting the Properties of the line element
      lineTo.setX(500.0f);
      lineTo.setY(150.0f);

      //Adding the path elements to Observable list of the Path class
      path.getElements().add(moveTo);
      path.getElements().add(lineTo);

      //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 a Line");

      //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 LineToExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls LineToExample

执行后,上述程序将生成一个 JavaFX 窗口,显示一条从当前位置绘制到指定位置的直线,如下所示。

lineto

Example 2

不仅仅是单线,您还可以向 JavaFX 应用程序添加多条线,以创建更复杂的形状。在此示例中,我们将尝试绘制一个简单的十字形。将此代码保存在一个名为 LineToCross.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;

public class LineToCross extends Application {
   @Override
   public void start(Stage stage) {
      //Creating a Path object
      Path path = new Path();

      //Moving to the starting point
      MoveTo moveTo = new MoveTo();
      moveTo.setX(100.0f);
      moveTo.setY(150.0f);

      //Instantiating the LineTo class
      LineTo lineTo = new LineTo();

      //Setting the Properties of the line element
      lineTo.setX(500.0f);
      lineTo.setY(150.0f);

      //Adding the path elements to Observable list of the Path class
      path.getElements().add(moveTo);
      path.getElements().add(lineTo);

      //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 a Line");

      //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 LineToCross.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls LineToCross

执行后,上述程序将生成一个 JavaFX 窗口,显示一个使用两条不同直线绘制的十字形结构,如下所示。

linetocross