JavaFX - 应用
-
简述
在本章中,我们将详细讨论 JavaFX 应用程序的结构,并通过示例学习创建 JavaFX 应用程序。 -
JavaFX 应用程序结构
通常,JavaFX 应用程序将具有三个主要组件,即 Stage, Scene 和 Nodes 如下图所示。阶段
Stage (一个窗口)包含 JavaFX 应用程序的所有对象。它由Stage 包的类 javafx.stage. 初级阶段由平台本身创建。创建的 Stage 对象作为参数传递给start() 的方法 Application 类(在下一节中解释)。一个 Stage 有两个参数决定它的位置,即 Width 和 Height. 它分为内容区和装饰(标题栏和边框)。有五种类型的阶段可用 -- Decorated
- Undecorated
- Transparent
- Unified
- Utility
你必须调用给 show() 显示 Stage 内容的方法。Scene
Scene 表示 JavaFX 应用程序的物理内容。它包含 Scene 图的所有内容。班上Scene 包裹的 javafx.scene表示 Scene 对象。在一个实例中, Scene 对象仅添加到一个阶段。您可以通过实例化 Scene 类来创建 Scene 。您可以通过传递其尺寸(高度和宽度)以及root node 到它的构造函数。Scene 图和节点
一种 scene graph是表示 Scene 内容的树状数据结构(分层)。相比之下,一个node 是 Scene 图的视觉/图形对象。一个节点可能包括 --
几何(图形)对象(2D 和 3D),例如 - 圆形、矩形、多边形等。
-
UI 控件,例如 - 按钮、复选框、选择框、文本区域等。
-
容器(布局窗格),例如边框窗格、网格窗格、流窗格等。
-
媒体元素,例如音频、视频和图像对象。
这 Node 包的类别 javafx.scene 代表JavaFX中的一个节点,这个类是所有节点的超类。如前所述,节点分为三种类型 --
Root Node − 第一个 Scene 图被称为根节点。
-
Branch Node/Parent Node− 带有子节点的节点称为分支/父节点。抽象类名为Parent 包裹的 javafx.scene 是所有父节点的基类,这些父节点将具有以下类型 -
-
Group− 组节点是包含子节点列表的集合节点。每当渲染组节点时,它的所有子节点都会按顺序渲染。应用于组的任何转换、效果状态都将应用于所有子节点。
-
Region − 它是所有基于 JavaFX Node 的 UI 控件的基类,例如 Chart、Pane 和 Control。
-
WebView − 该节点管理网络引擎并显示其内容。
-
-
Leaf Node− 没有子节点的节点称为叶节点。例如,Rectangle、Ellipse、Box、ImageView、MediaView 都是叶子节点的例子。
必须将根节点传递给 Scene 图。如果 Group 作为 root 传递,则所有节点都将被裁剪到 Scene 中,并且 Scene 大小的任何更改都不会影响 Scene 的布局。 -
创建 JavaFX 应用程序
要创建 JavaFX 应用程序,您需要实例化 Application 类并实现其抽象方法 start(). 在此方法中,我们将为 JavaFX 应用程序编写代码。应用类
这 Application 包的类别 javafx.application是应用程序在 JavaFX 中的入口点。要创建 JavaFX 应用程序,您需要继承该类并实现其抽象方法start(). 在此方法中,您需要编写 JavaFX 图形的全部代码在里面 main 方法,您必须使用 launch()方法。该方法在内部调用start() Application 类的方法,如下面的程序所示。public class JavafxSample extends Application { @Override public void start(Stage primaryStage) throws Exception { /* Code for JavaFX application. (Stage, scene, scene graph) */ } public static void main(String args[]){ launch(args); } }
内 start() 方法,为了创建典型的 JavaFX 应用程序,您需要按照以下步骤操作 --
准备一个包含所需节点的 Scene 图。
-
准备一个具有所需尺寸的 Scene 并将 Scene 图( Scene 图的根节点)添加到其中。
-
准备 Stage 并将 Scene 添加到 Stage 并显示 Stage 内容。
准备 Scene 图
根据您的应用程序,您需要准备一个包含所需节点的 Scene 图。由于根节点是第一个节点,所以需要创建一个根节点。作为根节点,您可以选择Group, Region or WebView.Group - Group 节点由名为的类表示 Group 属于包 javafx.scene,您可以通过实例化此类来创建一个 Group 节点,如下所示。Group root = new Group();
这 getChildren() 的方法 Group 类给你一个对象 ObservableList保存节点的类。我们可以检索此对象并向其添加节点,如下所示。//Retrieving the observable list object ObservableList list = root.getChildren(); //Setting the text object as a node list.add(NodeObject);
我们还可以将 Node 对象添加到组中,只需将它们传递给 Group 类及其在实例化时的构造函数,如下所示。Group root = new Group(NodeObject);
Region - 它是所有基于 JavaFX 节点的 UI 控件的基类,例如 --
Chart - 该类是所有图表的基类,属于包 javafx.scene.chart.这个类有两个子类,它们是 - PieChart 和 XYChart. 这两个依次有子类,例如AreaChart, BarChart, BubbleChart等用于在 JavaFX 中绘制不同类型的 XY-Plane Charts。您可以使用这些类在您的应用程序中嵌入图表。
-
Pane − Pane 是所有布局窗格的基类,例如 AnchorPane, BorderPane, DialogPane等。此类属于一个称为 - javafx.scene.layout.您可以使用这些类在应用程序中插入预定义的布局。
-
Control - 它是用户界面控件的基类,例如 Accordion, ButtonBar, ChoiceBox, ComboBoxBase, HTMLEditor, etc. This class belongs to the package javafx.scene.control.您可以使用这些类在应用程序中插入各种 UI 元素。
在一个 Group 中,可以实例化上述任何一个类,并将它们用作根节点,如下面的程序所示。//Creating a Stack Pane StackPane pane = new StackPane(); //Adding text area to the pane ObservableList list = pane.getChildren(); list.add(NodeObject);
WebView − 该节点管理网络引擎并显示其内容。下图表示 JavaFX 的节点类层次结构。准备 Scene
JavaFX Scene 由 Scene 包的类别 javafx.scene. 您可以通过实例化此类来创建 Scene ,如下面的代码块所示。在实例化时,必须将根对象传递给 Scene 类的构造函数。Scene scene = new Scene(root);
您还可以传递两个表示 Scene 高度和宽度的 double 类型的参数,如下所示。Scene scene = new Scene(root, 600, 300);
准备 Stage
这是任何 JavaFX 应用程序的容器,它为应用程序提供了一个窗口。它由Stage 包的类别 javafx.stage. 此类的对象作为参数传递start() 的方法 Application 班级。使用此对象,您可以在 Stage 上执行各种操作。主要您可以执行以下操作 --
使用方法设置 Stage 的标题 setTitle().
-
使用 setScene() 方法。
-
使用 show() 方法如下图。
//Setting the title to Stage. primaryStage.setTitle("Sample application"); //Setting the scene to Stage primaryStage.setScene(scene); //Displaying the stage primaryStage.show();
-
-
JavaFX 应用程序的生命周期
JavaFX Application 类具有三个生命周期方法,它们是 --
start() - 要编写 JavaFX 图形代码的入口点方法。
-
stop() - 一个可以被覆盖的空方法,在这里你可以编写停止应用程序的逻辑。
-
init() - 可以覆盖的空方法,但不能在此方法中创建 Stage 或 Scene 。
除了这些,它还提供了一个名为的静态方法 launch() 启动 JavaFX 应用程序。由于 launch()方法是静态的,您需要从静态上下文(通常为 main)调用它。每当启动 JavaFX 应用程序时,将执行以下操作(以相同的顺序)。-
应用程序类的一个实例被创建。
-
Init() 方法被调用。
-
这 start() 方法被调用。
-
启动器等待应用程序完成并调用 stop() 方法。
终止 JavaFX 应用程序
当应用程序的最后一个窗口关闭时,JavaFX 应用程序将隐式终止。您可以通过将布尔值“False”传递给静态方法来关闭此行为 setImplicitExit() (应该从静态上下文中调用)。您可以使用以下方法显式终止 JavaFX 应用程序 Platform.exit() 或者 System.exit(int)。 -
-
示例 1 – 创建一个空窗口
本节教您如何创建一个显示空窗口的 JavaFX 示例应用程序。以下是步骤 -第 1 步:创建一个类
创建一个Java类并继承 Application 包的类别 javafx.application 并实现该类的 start() 方法如下。public class JavafxSample extends Application { @Override public void start(Stage primaryStage) throws Exception { } }
步骤 2:创建组对象
在里面 start() 方法通过实例化名为 Group 的类来创建一个 group 对象,该类属于包 javafx.scene, 如下。Group root = new Group();
步骤 3:创建 Scene 对象
通过实例化名为的类来创建 Scene Scene 属于包 javafx.scene. 向这个类传递 Group 对象(root),在上一步中创建。除了根对象,您还可以传递两个表示屏幕高度和宽度的双参数以及 Group 类的对象,如下所示。Scene scene = new Scene(root,600, 300);
第 4 步:设置 Stage 的标题
您可以使用 setTitle() 的方法 Stage班级。这primaryStage 是一个 Stage 对象,它作为参数传递给 Scene 类的 start 方法。使用 primaryStage 对象,将 Scene 的标题设置为 Sample Application 如下所示。primaryStage.setTitle("Sample Application");
第 5 步:将 Scene 添加到 Stage
您可以使用方法将 Scene 对象添加到 Stage setScene() 类名为 Stage. 使用此方法添加前面步骤中准备的 Scene 对象,如下所示。primaryStage.setScene(scene);
第 6 步:显示 Stage 内容
使用名为的方法显示 Scene 的内容 show() 的 Stage 类如下。primaryStage.show();
第 7 步:启动应用程序
通过调用静态方法启动 JavaFX 应用程序 launch() 的 Application 类从主要方法如下。public static void main(String args[]){ launch(args); }
例子
以下程序生成一个空的 JavaFX 窗口。将此代码保存在名称为的文件中JavafxSample.javaimport javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.stage.Stage; public class JavafxSample extends Application { @Override public void start(Stage primaryStage) throws Exception { //creating a Group object Group group = new Group(); //Creating a Scene by passing the group object, height and width Scene scene = new Scene(group ,600, 300); //setting color to the scene scene.setFill(Color.BROWN); //Setting the title to Stage. primaryStage.setTitle("Sample Application"); //Adding the scene to Stage primaryStage.setScene(scene); //Displaying the contents of the stage primaryStage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。javac JavafxSample.java java JavafxSample
执行时,上述程序会生成一个 JavaFX 窗口,如下所示。 -
示例 2 – 绘制一条直线
在前面的例子中,我们已经看到了如何创建一个空 Stage ,现在在这个例子中让我们尝试使用 JavaFX 库绘制一条直线。以下是步骤 -第 1 步:创建一个类
创建一个Java类并继承 Application 包的类别 javafx.application 并实施 start() 这个类的方法如下。public class DrawingLine extends Application { @Override public void start(Stage primaryStage) throws Exception { } }
第 2 步:创建一条线
您可以通过实例化名为的类在 JavaFX 中创建一行 Line 属于一个包 javafx.scene.shape, 实例化这个类如下。//Creating a line object Line line = new Line();
第 3 步:设置线的属性
通过设置属性指定在 XY 平面上绘制线的坐标 startX, startY, endX 和 endY,使用它们各自的 setter 方法,如以下代码块所示。line.setStartX(100.0); line.setStartY(150.0); line.setEndX(500.0); line.setEndY(150.0);
步骤 4:创建组对象
在 start() 方法中,通过实例化名为 Group 的类来创建一个组对象,该类属于包 javafx.scene。将在上一步中创建的 Line(节点)对象作为参数传递给 Group 类的构造函数,以便将其添加到组中,如下所示 -Group root = new Group(line);
步骤 5:创建 Scene 对象
通过实例化名为的类来创建 Scene Scene 属于包 javafx.scene. 向这个类传递 Group 对象(root) 这是在上一步中创建的。除了根对象,您还可以传递两个表示屏幕高度和宽度的双参数以及 Group 类的对象,如下所示。Scene scene = new Scene(group ,600, 300);
第 6 步:设置 Stage 的标题
您可以使用 setTitle() 的方法 Stage班级。这primaryStage 是一个 Stage 对象,它作为参数传递给 Scene 类的 start 方法。使用 primaryStage 对象,将 Scene 的标题设置为 Sample Application 如下。primaryStage.setTitle("Sample Application");
第 7 步:将 Scene 添加到 Stage
您可以使用方法将 Scene 对象添加到 Stage setScene() 类名为 Stage. 使用此方法添加前面步骤中准备的 Scene 对象,如下所示。primaryStage.setScene(scene);
步骤 8:显示 Stage 内容
使用名为的方法显示 Scene 的内容 show() 的 Stage 类如下。primaryStage.show();
步骤 9:启动应用程序
通过调用静态方法启动 JavaFX 应用程序 launch() 的 Application 类从主要方法如下。public static void main(String args[]){ launch(args); }
例子
以下程序显示了如何使用 JavaFX 生成一条直线。将此代码保存在名称为的文件中JavafxSample.java.import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.shape.Line; import javafx.stage.Stage; public class DrawingLine extends Application{ @Override public void start(Stage stage) { //Creating a line object Line line = new Line(); //Setting the properties to a line line.setStartX(100.0); line.setStartY(150.0); line.setEndX(500.0); line.setEndY(150.0); //Creating a Group Group root = new Group(line); //Creating a Scene Scene scene = new Scene(root, 600, 300); //Setting title to the scene stage.setTitle("Sample application"); //Adding the scene to the stage stage.setScene(scene); //Displaying the contents of a scene stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。javac DrawingLine.java java DrawingLine
执行时,上述程序会生成一个 JavaFX 窗口,显示一条直线,如下所示。 -
示例 3 – 显示文本
我们还可以在 JavaFX Scene 中嵌入文本。此示例显示如何在 JavaFX 中嵌入文本。以下是步骤 -第 1 步:创建一个类
创建一个 Java 类并继承 Application 包的类别 javafx.application 并实施 start() 这个类的方法如下。public class DrawingLine extends Application { @Override public void start(Stage primaryStage) throws Exception { } }
第 2 步:嵌入文本
您可以通过实例化名为的类将文本嵌入到 JavaFX Scene 中 Text 属于一个包 javafx.scene.shape,实例化这个类。您可以通过以字符串格式传递要嵌入的文本来实例化此类,或者,您可以使用默认构造函数创建文本对象,如下所示。//Creating a Text object Text text = new Text();
第 3 步:设置字体
您可以使用 setFont() 的方法 Text班级。此方法接受一个字体对象作为参数。将给定文本的字体设置为 45,如下所示。//Setting font to the text text.setFont(new Font(45));
第 4 步:设置文本的位置
您可以通过使用各自的 setter 方法设置 X、Y 坐标来设置文本在 XY 平面上的位置 setX() 和 setY() 如下。//setting the position of the text text.setX(50); text.setY(150);
第五步:设置要添加的文字
您可以使用 Text 类的 setText() 方法设置要添加的文本。此方法接受表示要添加的文本的字符串参数。text.setText("Welcome to Tutorialspoint");
步骤 6:创建组对象
在里面 start() 方法,通过实例化名为Group的类来创建一个group对象,该类属于包 javafx.scene.将在上一步中创建的 Text(节点)对象作为参数传递给 Group 类的构造函数,以便将其添加到组中,如下所示 -Group root = new Group(text)
步骤 7:创建 Scene 对象
通过实例化名为的类来创建 Scene Scene 属于包 javafx.scene. 向这个类传递 Group 对象(root),在上一步中创建。除了根对象,您还可以传递两个表示屏幕高度和宽度的双参数以及 Group 类的对象,如下所示。Scene scene = new Scene(group ,600, 300);
第八步:设置 Stage 标题
您可以使用 setTitle() 的方法 Stage班级。这primaryStage 是一个 Stage 对象,它作为参数传递给 Scene 类的 start 方法。使用 primaryStage 对象,将 Scene 的标题设置为 Sample Application 如下所示。primaryStage.setTitle("Sample Application");
第 9 步:将 Scene 添加到 Stage
您可以使用方法将 Scene 对象添加到 Stage setScene() 类名为 Stage. 使用此方法添加前面步骤中准备的 Scene 对象,如下所示。primaryStage.setScene(scene);
第 10 步:显示 Stage 内容
使用名为的方法显示 Scene 的内容 show() 的 Stage 类如下。primaryStage.show();
第 11 步:启动应用程序
通过调用静态方法启动 JavaFX 应用程序 launch() 的 Application 类从主要方法如下。public static void main(String args[]){ launch(args); }
例子
以下是使用 JavaFX 显示文本的程序。将此代码保存在具有名称的文件中DisplayingText.java.import javafx.application.Application; import javafx.collections.ObservableList; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.text.Font; import javafx.scene.text.Text; public class DisplayingText extends Application { @Override public void start(Stage stage) { //Creating a Text object Text text = new Text(); //Setting font to the text text.setFont(new Font(45)); //setting the position of the text text.setX(50); text.setY(150); //Setting the text to be added. text.setText("Welcome to Tutorialspoint"); //Creating a Group object Group root = new Group(); //Retrieving the observable list object ObservableList list = root.getChildren(); //Setting the text object as a node to the group object list.add(text); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Sample Application"); //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 DisplayingText.java java DisplayingText