Javafx 简明教程

JavaFX - ArcTo Path Object

Path 元素 Arc 用于从当前位置绘制一条到指定坐标点处的弧形路径。

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

此类具有 4 个双数据类型的属性,即 −

  1. X − 弧形中心的 x 坐标。

  2. Y − 弧形中心的 y 坐标。

  3. radiusX − 当前圆弧所属的完整椭圆的宽度。

  4. radiusY − 当前圆弧所属的完整椭圆的高度。

要绘制路径元素弧线,需要将值传递给这些属性。在实例化时,可以通过按相同顺序将它们传递给此类的构造函数来完成此操作;或使用它们各自的 setter 方法。

Steps to draw PathElement Arc

要在 JavaFX 中将弧线绘制到从当前位置到指定点的弧线,请按照以下步骤操作。

Step 1: Creating a Path Object

通过在 Application 类的 start() 方法中实例化 Path 类来创建 Path 对象,如下所示。

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

Step 2: Create a 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 ArcTo

通过实例化名为 ArcTo 的类来创建路径元素二次贝塞尔曲线,该类属于包 javafx.scene.shape ,如下所示 −

//Creating an object of the class ArcTo
ArcTo arcTo = new ArcTo()

Step 4: Setting Properties to the Arc Element

指定椭圆的中心(此弧线的一部分)的 x、y 坐标。然后,可以使用它们各自的 setter 方法指定 radiusX、radiusY、开始角度和弧线的长度,如下所示。

//setting properties of the path element arc
arcTo.setX(300.0);
arcTo.setY(50.0);

arcTo.setRadiusX(50.0);
arcTo.setRadiusY(50.0);

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

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

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

Step 6: Launching Application

创建 Arc 路径对象后,请按以下给定步骤正确启动应用程序 −

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

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

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

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

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

Example

以下是使用 JavaFX 的 Path 类绘制从当前点到指定位置的弧线的程序。将此代码保存在名为 ArcExample.java 的文件中。

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

public class ArcExample extends Application {
   @Override
   public void start(Stage stage) {
      //Creating an object of the class Path
      Path path = new Path();

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

      //Instantiating the arcTo class
      ArcTo arcTo = new ArcTo();

      //setting properties of the path element arc
      arcTo.setX(300.0);
      arcTo.setY(50.0);

      arcTo.setRadiusX(50.0);
      arcTo.setRadiusY(50.0);

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

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

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

drawing arc path

Example

让我们尝试在 JavaFX 中绘制一个 ArcTo 路径以创建一个摆锤对象,该对象有一个在 Arc 路径上往复运动的圆形摆。将此代码保存在名为 ArcToAnimation.java 的文件中。

import javafx.application.Application;
import javafx.animation.PathTransition;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.*;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.util.Duration;

public class ArcToAnimation extends Application {
   @Override
   public void start(Stage stage) {
      // Drawing a circle
      Circle circle = new Circle(300.0f, 50.0f, 40.0f);

      //Creating an object of the class Path
      Path path = new Path();

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

      //Instantiating the arcTo class
      ArcTo arcTo = new ArcTo();

      //setting properties of the path element arc
      arcTo.setX(300.0);
      arcTo.setY(50.0);

      arcTo.setRadiusX(50.0);
      arcTo.setRadiusY(50.0);

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

      //Creating a path transition
      PathTransition pathTransition = new PathTransition();

      //Setting the duration of the path transition
      pathTransition.setDuration(Duration.millis(1000));

      //Setting the node
      pathTransition.setNode(circle);

      //Setting the path
      pathTransition.setPath(path);

      //Setting the orientation of the path
      pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);

      //Setting the cycle count for the transition
      pathTransition.setCycleCount(50);

      //Setting auto reverse value to true
      pathTransition.setAutoReverse(true);

      //Playing the animation
      pathTransition.play();

      //Creating a Group object
      Group root = new Group();
      root.getChildren().addAll(circle, 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 ArcExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls ArcExample

执行上述程序后,将生成一个 JavaFX 窗口,其中显示了一个摆锤路径,如下所示。

arcto pendulum