Javafx 简明教程

JavaFX - CubicCurveTo Path Object

三次曲线是一个二维结构,是一种贝塞尔曲线。贝塞尔曲线被定义为通过一组控制点 (P0…​Pn) 的曲线。当控制点的数量为 4(或曲线的阶数为 3)时,它被称为三次曲线。

JavaFX 还提供一个 CubicCurve 路径对象来绘制更复杂的形状。在这里,我们仅考虑三次曲线的端点和控制点,以构造路径对象。让我们进一步详细了解如何构造它。

CubicCurve Path Object

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

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

此类有 6 个 double 数据类型的属性,即 −

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

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

  3. controlX1 − 曲线的第 1 个控制点的 x 坐标。

  4. controlY1 − 曲线的第 1 个控制点的 y 坐标。

  5. controlX2 − 曲线的第 2 个控制点的 x 坐标。

  6. controlY2 − 曲线的第 2 个控制点的 y 坐标。

要绘制三次曲线,你需要将值传递给这些属性。可以通过将这些值传递给此类的构造函数来完成。这些值应与实例化时的顺序相同;或者使用它们的相应 setter 方法。

Steps to draw PathElement Cubic Curve

要在 JavaFX 中从当前位置绘制三次曲线到指定点,请按照如下给定的步骤操作。

Step 1: Creating a Class

如以下所示,在应用程序类的 start() 方法内创建一个三次曲线路径对象。

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 CubicCurveTo

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

//Creating an object of the class CubicCurveTo
CubicCurveTo cubicCurveTo= new CubicCurveTo ();

Step 4: Setting Properties to the Cubic Curve Element

指定要从当前位置绘制三次曲线的点的坐标。然后你应该通过它们的 setter 方法设置属性 x、y、controlX1、controlY1、controlX2、controlY2 和控制点的坐标,如下所示。

//Setting properties of the class CubicCurve
cubicCurveTo.setControlX1(400.0f);
cubicCurveTo.setControlY1(40.0f);
cubicCurveTo.setControlX2(175.0f);
cubicCurveTo.setControlY2(250.0f);
cubicCurveTo.setX(500.0f);
cubicCurveTo.setY(150.0f);

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

将前面步骤创建的路径元素 → MoveToCubicCurveTo 添加到 Path 类的 observable 列表,如下所示 −

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

Step 6: Launching Application

创建 CubicCurveTo 路径对象后,按照下面给出的步骤正确启动应用程序 −

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

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

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

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

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

Example

下面是用 JavaFX 的 Path 类从当前点绘制到指定位置的三次曲线的程序。将此代码保存在名称为 CubicCurveToExample.java 的文件中。

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

public class CubicCurveToExample 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 CubicCurve
      CubicCurveTo cubicCurveTo = new CubicCurveTo();

      //Setting properties of the class CubicCurve
      cubicCurveTo.setControlX1(400.0f);
      cubicCurveTo.setControlY1(40.0f);
      cubicCurveTo.setControlX2(175.0f);
      cubicCurveTo.setControlY2(250.0f);
      cubicCurveTo.setX(500.0f);
      cubicCurveTo.setY(150.0f);

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

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

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

drawing cubic curve path

Example

另一个示例中,我们尝试将 Stroke 过渡动画应用于三次曲线路径。在此,将该 2D 形状的描边设置为将其颜色从黑色更改为棕色。将此代码保存在名称为 CubicCurveToAnimation.java 的文件中。

import javafx.application.Application;
import javafx.animation.StrokeTransition;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.CubicCurveTo;
import javafx.util.Duration;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.paint.Color;

public class CubicCurveToAnimation 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 CubicCurve
      CubicCurveTo cubicCurveTo = new CubicCurveTo();

      //Setting properties of the class CubicCurve
      cubicCurveTo.setControlX1(400.0f);
      cubicCurveTo.setControlY1(40.0f);
      cubicCurveTo.setControlX2(175.0f);
      cubicCurveTo.setControlY2(250.0f);
      cubicCurveTo.setX(500.0f);
      cubicCurveTo.setY(150.0f);

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

      //creating stroke transition
      StrokeTransition st = new StrokeTransition();

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

      //Setting the shape for the transition
      st.setShape(path);

      //Setting the fromValue property of the transition (color)
      st.setFromValue(Color.BLACK);

      //Setting the toValue property of the transition (color)
      st.setToValue(Color.BROWN);

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

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

      //Playing the animation
      st.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 cubic curve");

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

执行时,上述程序会生成一个 JavaFX 窗口,该窗口显示具有描边过渡的三次曲线。这是从当前位置绘制到指定点的,如下所示。

cubiccurveto stroke