Javafx 简明教程
JavaFX - Drawing an Ellipse
椭圆由两点定义,每一点都称为焦点。如果取椭圆上的任何一点,到焦点点的距离的总和是常数。椭圆的大小由这两个距离的总和决定。这些距离的总和等于长轴(椭圆最长直径)的长度。事实上,圆是椭圆的特例。
椭圆有以下三个属性: −
-
Centre − 椭圆内部的一个点,它是在两焦点之间连线的中点。主轴和次轴的交点。
-
Major axis − 椭圆的最长直径。
-
Minor axis − 椭圆的最短直径。
Ellipse in JavaFX
在 JavaFX 中,椭圆由名为 Ellipse 的类表示。此类属于包 javafx.scene.shape 。
通过实例化此类,可以在 JavaFX 中创建椭圆节点。
此类具有 4 个双数据类型的属性,即 −
-
centerX − 椭圆中心在像素中的 x 坐标。
-
centerY − 椭圆中心在像素中的 y 坐标。
-
radiusX − 椭圆的宽度像素。
-
radiusY − 椭圆的高度像素。
要绘制椭圆,需要将值传递给这些属性,要么将它们按相同順序传递给此类的构造函数,要么使用设置器方法。
Steps to Draw Ellipse
按照以下给出的步骤在 JavaFX 中绘制椭圆。
Step 1: Creating an Ellipse
可以通过在 start() 方法内部实例化名为 Ellipse 的类在 JavaFX 中创建椭圆,该类属于包 javafx.scene.shape 。你可以按如下方式实例化该类。
public class ClassName extends Application {
public void start(Stage primaryStage) throws Exception {
//Creating an Ellipse object
Ellipse ellipse = new Ellipse();
}
}
Step 2: Setting Properties to the Ellipse
指定椭圆中心的 x、y 坐标 →椭圆沿 x 轴和 y 轴(主轴和次轴)的宽度,通过设置 X、Y、RadiusX 和 RadiusY 属性来设置圆的半径。
可以使用它们各自的 setter 方法执行此操作,如下面的代码块所示。
ellipse.setCenterX(300.0f);
ellipse.setCenterY(150.0f);
ellipse.setRadiusX(150.0f);
ellipse.setRadiusY(75.0f);
Step 3: Creating a Group Object
在 start() 方法中,通过实例化名为 Group 的类创建一个组对象,该类属于 javafx.scene 包。通过将上一步中创建的 Ellipse(节点)对象作为参数传递给 Group 类的构造函数来实例化此类。应该这样操作才能将其添加到组中,如下面的代码块所示 −
Group root = new Group(ellipse);
Step 4: Launching Application
创建二维对象后,请按照下面给出的步骤正确启动应用程序:
-
首先,通过将组对象作为其构造函数的参数值传递来实例化名为 Scene 的类。你也可以将应用程序屏幕的尺寸作为可选参数传递给此构造函数。
-
然后,使用 Stage 类的 setTitle() 方法设置阶段标题。
-
现在,使用名为 Stage 的类的 setScene() 方法将 Scene 对象添加到阶段。
-
使用名为 show() 的方法显示场景的内容。
-
最后,借助 launch() 方法启动应用程序。
Example
下面是一个使用 JavaFX 生成椭圆的程序。将此代码保存在名为 EllipseExample.java 的文件中。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Ellipse;
public class EllipseExample extends Application {
@Override
public void start(Stage stage) {
//Drawing an ellipse
Ellipse ellipse = new Ellipse();
//Setting the properties of the ellipse
ellipse.setCenterX(300.0f);
ellipse.setCenterY(150.0f);
ellipse.setRadiusX(150.0f);
ellipse.setRadiusY(75.0f);
//Creating a Group object
Group root = new Group(ellipse);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing an Ellipse");
//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 EllipseExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls EllipseExample
在执行时,以上程序生成了一个 JavaFX 窗口,显示一个如下图所示的椭圆。
Example
在下面给出的另一个示例中,我们尝试绘制一个圆形行星的椭圆轨道。将此文件命名为 PlanetOrbit.java 。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.animation.PathTransition;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.util.Duration;
public class PlanetOrbit extends Application {
@Override
public void start(Stage stage) {
//Drawing an orbit
Ellipse orbit = new Ellipse();
orbit.setFill(Color.WHITE);
orbit.setStroke(Color.BLACK);
//Setting the properties of the ellipse
orbit.setCenterX(300.0f);
orbit.setCenterY(150.0f);
orbit.setRadiusX(150.0f);
orbit.setRadiusY(100.0f);
// Drawing a circular planet
Circle planet = new Circle(300.0f, 50.0f, 40.0f);
//Creating the animation
PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(Duration.millis(1000));
pathTransition.setNode(planet);
pathTransition.setPath(orbit);
pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
pathTransition.setCycleCount(50);
pathTransition.setAutoReverse(false);
pathTransition.play();
//Creating a Group object
Group root = new Group();
root.getChildren().addAll(orbit, planet);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing a Planet Orbit");
//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 PlanetOrbit.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls PlanetOrbit
在执行时,以上程序生成了一个 JavaFX 窗口,显示一个如下图所示的轨道。