Javafx 简明教程

JavaFX - Drawing a Quad Curve

从数学上讲,二次曲线是一个由二次函数描述的曲线,例如 y = ax2 + bx + c。

计算机图形中使用贝塞尔曲线。这些是参数曲线,在所有尺度下都显得相当平滑。这些贝塞尔曲线基于 XY 平面上的点绘制。

二次曲线是 XY 平面上的贝塞尔参数曲线,是 2 度曲线。使用三个点绘制: start point, end pointcontrol point ,如下图所示:

quadcurve

Quad Curve in JavaFX

在 JavaFX 中,Quad 曲线由名为 QuadCurve 的类表示。此类属于 javafx.scene.shape 包。

通过实例化此类,你可以在 JavaFX 中创建一个 QuadCurve 节点。

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

  1. startX − 曲线起点的 x 坐标。

  2. startY − 曲线起点的 y 坐标。

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

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

  5. endX − 曲线终点的 x 坐标。

  6. endY − 曲线终点的 y 坐标。

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

Steps to Draw Quad Curve

要使用 JavaFX 绘制贝塞尔四边形曲线,请执行以下步骤。

Step 1: Creating a Quad Curve

你可以通过实例化属于包 javafx.scene.shape 的名为 QuadCurve 的类来在 JavaFX 中创建一个 Quad 曲线。然后,你可以在 Application 类的 start() 方法中实例化此类,如下面的代码块所示。

public class ClassName extends Application {
   public void start(Stage primaryStage) throws Exception {
      //Creating an object of the class QuadCurve
      QuadCurve quadcurve = new QuadCurve();
   }
}

Step 2: Setting Properties to the Quad Curve

使用各自的 setter 方法指定所需曲线的三个点的 x、y 坐标:起始点、结束点和控制点,如下面的代码块所示。

//Adding properties to the Quad Curve
quadCurve.setStartX(100.0);
quadCurve.setStartY(220.0f);
quadCurve.setEndX(500.0f);
quadCurve.setEndY(220.0f);
quadCurve.setControlX(250.0f);
quadCurve.setControlY(0.0f);

或者,通过使用各自的 setter 方法,如下所示:

QuadCurve quadcurve = new QuadCurve(startX, startY, controlX, controlY, endX, endY);

Step 3: Adding Quad Curve Object to Group

start() 方法中,通过将之前创建的 QuadCurve 对象作为其构造函数的参数值来实例化 Group 类:

Group root = new Group(quadcurve);

Step 4: Launching Application

创建二维对象后,请按照下面给出的步骤正确启动应用程序:

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

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

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

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

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

Example

下面是一个使用 JavaFX 生成四边形曲线的程序。将此代码保存在一个名为 QuadCurveExample.java. 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.QuadCurve;

public class QuadCurveExample extends Application {
   @Override
   public void start(Stage stage) {
      //Creating a QuadCurve
      QuadCurve quadCurve = new QuadCurve();

      //Adding properties to the Quad Curve
      quadCurve.setStartX(100.0);
      quadCurve.setStartY(220.0f);
      quadCurve.setEndX(500.0f);
      quadCurve.setEndY(220.0f);
      quadCurve.setControlX(250.0f);
      quadCurve.setControlY(0.0f);

      //Creating a Group object
      Group root = new Group(quadCurve);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 300);

      //Setting title to the Stage
      stage.setTitle("Drawing a Quad 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 QuadCurveExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls QuadCurveExample

在执行过程中,以上程序生成一个显示一个贝塞尔四边形曲线的 JavaFX 窗口,如下面的屏幕截图所示。

drawing quad curve

Example

现在,您还可以通过应用任何效果(例如绽放效果)来绘制此四边形曲线,如下面的示例所示。将代码保存在名为 QuadCurveEffect.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Bloom;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.shape.QuadCurve;

public class QuadCurveEffect extends Application {
   @Override
   public void start(Stage stage) {
      //Creating a QuadCurve
      QuadCurve quadCurve = new QuadCurve();

      //Adding properties to the Quad Curve
      quadCurve.setStartX(100.0);
      quadCurve.setStartY(220.0f);
      quadCurve.setEndX(300.0f);
      quadCurve.setEndY(220.0f);
      quadCurve.setControlX(250.0f);
      quadCurve.setControlY(0.0f);

	  quadCurve.setFill(Color.RED);

      //Instantiating the Bloom class
      Bloom bloom = new Bloom();

      //setting threshold for bloom
      bloom.setThreshold(0.1);

      //Applying bloom effect to quadCurve
      quadCurve.setEffect(bloom);

      //Creating a Group object
      Group root = new Group(quadCurve);

      //Creating a scene object
      Scene scene = new Scene(root, 400, 300);

      //Setting title to the Stage
      stage.setTitle("Drawing a Quad 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 QuadCurveEffect.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls QuadCurveEffect

在执行过程中,以上程序生成一个显示一个贝塞尔四边形曲线的 JavaFX 窗口,如下面的屏幕截图所示。

quadcurve effect