Javafx 简明教程

JavaFX - QuadCurveTo Path Object

二次曲线或四次曲线通常定义为由二次方程式定义的曲线。在 JavaFX 中,我们利用 6 种不同的属性来创建这个四次曲线节点。若要使用四次曲线创建复杂形状,我们必须每次指定这些属性。

JavaFX 通过提供四次曲线路径对象,将这个过程简化,该对象采用较少的属性来绘制它。

我们将在本章后面的部分详细了解四次曲线路径对象。

QuadCurve Path Object

路径元素二次曲线用于将一个 quadratic curve 从当前位置绘制到指定坐标中的点。

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

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

  1. setX − 要从当前位置绘制曲线到的点的 x 坐标。

  2. setY − 要从当前位置绘制曲线的点的 y 坐标。

  3. controlX − 曲线控制点的 x 坐标。

  4. controlY − 曲线控制点的 y 坐标。

若要绘制二次曲线,你需将值传递给这些属性。可以通过在实例化时按照相同顺序将它们传递给该类的构造函数来实现;或者通过使用它们各自的赋值方法实现。

Steps to draw PathElement Quadratic Curve

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

Step 1: Creating a Path Object

实例化 Path 类以在 Application 类的 start() 方法内创建 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)。可以通过按以下方式使用类 MoveTosetX()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 QuadCurveTo

通过按以下方式实例化属于包 javafx.scene.shape 的名为 QuadCurveTo 的类来创建路径元素二次曲线。

//Creating an object of the class QuadCurveTo
QuadCurveTo quadCurveTo = new QuadCurveTo()

Step 4: Setting Properties to the Quadratic Curve Element

指定从当前位置绘制二次曲线的点的坐标。然后,你应通过它们的赋值方法为 x、y、controlx、controlY 和控制点坐标设置属性,如下所示。

//Setting properties of the class QuadCurve
quadCurveTo.setX(500.0f);
quadCurveTo.setY(220.0f);
quadCurveTo.setControlX(250.0f);
quadCurveTo.setControlY(0.0f);

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

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

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

Step 6: Launching Application

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

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

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

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

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

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

Example 1

以下是一个程序,使用 JavaFX 名为 Path 的类从当前点绘制二次曲线到指定位置。将该代码保存在名为 QuadCurveToExample.java 的文件中。

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

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

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

      //Instantiating the class QuadCurve
      QuadCurveTo quadCurveTo = new QuadCurveTo();

      //Setting properties of the class QuadCurve
      quadCurveTo.setX(500.0f);
      quadCurveTo.setY(220.0f);
      quadCurveTo.setControlX(250.0f);
      quadCurveTo.setControlY(0.0f);

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

      //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 QuadCurve through a specified 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 QuadCurveToExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls QuadCurveToExample

执行时,上述程序生成一个显示二次曲线的 JavaFX 窗口。它从当前位置绘制到指定点,如下所示。

drawing quadratic curve

Example 2

在此示例中,让我们尝试对这个四次曲线路径应用一些动画。这里,我们绘制一个示例四次曲线并对其应用淡出过渡。将该代码保存在名为 QuadCurveToAnimation.java 的文件中。

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

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

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

      //Instantiating the class QuadCurve
      QuadCurveTo quadCurveTo = new QuadCurveTo();

      //Setting properties of the class QuadCurve
      quadCurveTo.setX(500.0f);
      quadCurveTo.setY(220.0f);
      quadCurveTo.setControlX(250.0f);
      quadCurveTo.setControlY(0.0f);

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

      //Creating the fade Transition
      FadeTransition fadeTransition = new FadeTransition();
	  fadeTransition.setDuration(Duration.millis(1000));

	  //Setting the node for Transition
      fadeTransition.setNode(path);

      //Setting the property fromValue of the transition (opacity)
      fadeTransition.setFromValue(1.0);

      //Setting the property toValue of the transition (opacity)
      fadeTransition.setToValue(0.3);

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

      //Setting auto reverse value to false
      fadeTransition.setAutoReverse(false);

      //Playing the animation
      fadeTransition.play();

      //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 QuadCurve through a specified 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 QuadCurveToAnimation.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls QuadCurveToAnimation

执行时,上述程序生成一个 JavaFX 窗口,显示一个逐渐消失的二次曲线。它从当前位置绘制到指定点,如下所示。

quadcurveto fade