在本章中,我们将详细讨论JavaFX应用程序的结构,并学习使用示例创建JavaFX应用程序.
通常,JavaFX应用程序将有三个主要组件,即舞台,场景和节点,如下图所示.
阶段(a window)包含JavaFX应用程序的所有对象.它由包 javafx.stage 的 Stage 类表示.主要阶段由平台本身创建.创建的stage对象作为参数传递给 Application 类的 start()方法(在下一节中进行了解释).
一个阶段有两个参数确定其位置,即宽度和高度.它分为内容区域和装饰(标题栏和边框).
有五种类型的阶段可用&减去;
装饰
未修饰
透明
统一
实用程序
您必须调用 show()方法来显示舞台的内容.
场景表示JavaFX应用程序的物理内容.它包含场景图的所有内容.包 javafx.scene 的类场景表示场景对象.在一个实例中,场景对象仅添加到一个阶段.
您可以通过实例化场景类来创建场景.您可以通过将其尺寸(高度和宽度)与根节点一起传递给其构造函数来选择场景的大小.
场景图是表示场景内容的树状数据结构(分层).相比之下,节点是场景图的可视/图形对象.
节点可能包括 :
几何(图形)对象(2D和3D),例如 : 圆形,矩形,多边形等
UI控制,例如 : 按钮,复选框,选择框,文本区等
容器(布局窗格),例如边框窗格,网格窗格,流窗格等
媒体元素,如音频,视频和图像对象.
软件包 javafx.scene 的 Node 类表示JavaFX中的一个节点,该类是所有节点的超类.
如前所述,节点有三种类型和减号;
根节点 : 第一个场景图称为根节点.
分支节点/父节点 : 具有子节点的节点称为分支/父节点.包 javafx.scene 的名为 Parent 的抽象类是所有父节点的基类,这些父节点将具有以下类型 :
组 : 组节点是包含子节点列表的集合节点.每当渲染组节点时,其所有子节点都按顺序呈现.应用于组的任何转换,效果状态都将应用于所有子节点.
Region : 它是所有基于JavaFX节点的UI控件的基类,例如图表,窗格和控件.
WebView : 此节点管理Web引擎并显示其内容.
叶节点 : 没有子节点的节点称为叶节点.例如,Rectangle,Ellipse,Box,ImageView,MediaView是叶节点的示例.
必须将根节点传递给场景图.如果以root身份传递组,则所有节点都将被剪切到场景中,并且场景大小的任何更改都不会影响场景的布局.
要创建JavaFX应用程序,需要实例化Application类并实现其抽象方法 start().在这个方法中,我们将编写JavaFX应用程序的代码.
应用程序类package javafx.application 是JavaFX中应用程序的入口点.要创建JavaFX应用程序,您需要继承此类并实现其抽象方法 start().在此方法中,您需要编写JavaFX图形的整个代码
在 main 方法中,您必须使用启动来启动应用程序()方法.此方法在内部调用Application类的 start()方法,如以下程序所示.
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应用程序,你需要按照下面和下面给出的步骤;
准备一个包含所需节点的场景图.
准备一个具有所需尺寸的场景,并将场景图(场景图的根节点)添加到场景中.
准备舞台并将场景添加到舞台并显示舞台的内容.
根据您的应用程序,您需要准备一个包含所需节点的场景图.由于根节点是第一个节点,因此您需要创建根节点.作为根节点,您可以从组,区域或WebView 中进行选择.
组 : Group节点由名为 Group 的类表示,该类属于包 javafx.scene ,您可以通过实例化此类来创建Group节点,如下所示.
Group root = new Group();
组类的 getChildren()方法为您提供的对象包含节点的ObservableList 类.我们可以检索此对象并向其添加节点,如下所示.
//检索可观察列表对象 ObservableList list = root .getChildren(); //将文本对象设置为节点 list.add(NodeObject);
我们还可以将Node对象添加到组中,只需将它们传递给 Group 类及其构造函数实例化,如下所示.
Group root = new Group(NodeObject);
地区 : 它是所有基于JavaFX节点的UI控件的Base类,例如 :
Chart : 这个类是所有图表的基类,它属于包 javafx.scene.chart .
这个类有两个子类,它们是&减去; PieChart 和 XYChart .这两个又有子类,如 AreaChart,BarChart,BubbleChart 等,用于在JavaFX中绘制不同类型的XY平面图.
你可以使用这些类可以在您的应用程序中嵌入图表.
Pane : 窗格是所有布局窗格的基类,例如 AnchorPane,BorderPane,DialogPane 等.此类属于一个名为&minus的包; javafx.scene.layout .
您可以使用这些类在应用程序中插入预定义的布局.
控制 : 它是用户界面控件的基类,例如 Accordion,ButtonBar,ChoiceBox,ComboBoxBase,HTMLEditor等.此类属于包javafx.scene.control .
您可以使用这些类在应用程序中插入各种UI元素.
在一个组中,你可以实例化任何上述类并将它们用作根节点,如以下程序所示.
//创建堆栈窗格 StackPane pane = new StackPane(); //在窗格中添加文本区域 ObservableList list = pane.getChildren(); list.add(NodeObject);
WebView : 此节点管理Web引擎并显示其内容.
以下是表示JavaFX的节点类层次结构的图表.
JavaFX场景由场景包的类 javafx.scene .您可以通过实例化此类来创建一个Scene,如下面的cod块所示.
实例化时,必须将根对象传递给场景类的构造函数.
Scene scene = new Scene(root);
您还可以传递两个表示场景高度和宽度的double类型参数,如下所示.
Scene scene = new Scene(root, 600, 300);
这是任何JavaFX应用程序的容器,它为应用程序提供了一个窗口.它由包 javafx.stage 的 Stage 类表示.此类的对象作为 Application 类的 start()方法的参数传递.
使用此对象,你可以在舞台上进行各种操作.主要是你可以执行以下 :
使用方法 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 Application类有三种生命周期方法,它们是 :
start() : 要写入JavaFX图形代码的入口点方法.
stop() : 一个可以覆盖的空方法,在这里你可以编写停止应用程序的逻辑.
init() : 一个可以覆盖的空方法,但是你不能在这个方法中创建阶段或场景.
除了这些,它提供了一个名为 launch()的静态方法,用于启动JavaFX应用程序.
由于 launch()方法是静态的,您需要调用它从静态上下文(主要是一般).每当启动JavaFX应用程序时,将执行以下操作(按相同顺序).
创建了应用程序类.
调用Init()方法.
调用 start()方法.
启动程序等待应用程序完成并调用 stop()方法.
关闭应用程序的最后一个窗口时,将隐式终止JavaFX应用程序.您可以通过将布尔值"False"传递给静态方法 setImplicitExit()(应该从静态上下文中调用)来关闭此行为.
您可以使用方法 Platform.exit()或 System.exit (int)显式终止JavaFX应用程序.
本节教您如何创建显示空窗口的JavaFX示例应用程序.以下是步骤 :
创建Java类并继承应用程序类包 javafx.application 并按如下方式实现此类的start()方法.
public class JavafxSample extends Application { @Override public void start(Stage primaryStage) throws Exception { } }
在 start()方法中,通过实例化名为Group的类来创建组对象,该类属于包 javafx.scene ,如下所示.
Group root = new Group();
通过实例化名为场景的类来创建场景属于包 javafx.scene .对于这个类,传递在上一步中创建的Group对象(root).
除了根对象,你还可以传递两个双参数表示屏幕的高度和宽度以及Group类的对象,如下所示.
Scene scene = new Scene(root,600, 300);
您可以使用
使用 primaryStage 对象,将场景标题设置为示例应用程序,如下所示.
primaryStage.setTitle("Sample Application");
您可以使用方法
primaryStage.setScene(scene);
使用名为
primaryStage.show();
通过调用静态方法 launch()启动JavaFX应用程序
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.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窗口,如下所示.
在前面的例子中,我们已经看到了如何创建一个空阶段,现在在这个例子中让我们尝试使用JavaFX库绘制一条直线.
以下是步骤 :
创建Java类并继承包 javafx.application 的应用程序类,并按如下方式实现此类的 start()方法.
public class DrawingLine extends Application { @Override public void start(Stage primaryStage) throws Exception { } }
您可以通过实例化属于包 javafx.scene.shape的名为 Line 的类在JavaFX中创建一行,按如下方式实例化此类.
//创建一个行对象 Line line = new Line();
通过设置指定在XY平面上绘制线的坐标属性 startX,startY,endX 和 endY ,使用各自的setter方法,如下面的代码块所示.
line.setStartX(100.0); line.setStartY(150.0); line.setEndX(500.0); line.setEndY(150.0);
在start()方法中,通过实例化类来创建组对象命名为Group,属于包javafx.scene.
将在上一步中创建的Line(node)对象作为参数传递给Group类的构造函数,按顺序将其添加到组中,如下所示 :
Group root = new Group(line);
通过实例化名为场景的类来创建场景属于包 javafx.scene .对于这个类,传递在上一步中创建的Group对象(root).
除了根对象,你还可以传递两个double表示屏幕高度和宽度的参数以及Group类的对象,如下所示.
Scene scene = new Scene(group ,600, 300);
您可以使用
使用 primaryStage 对象,将场景标题设置为示例应用程序,如下所示.
primaryStage.setTitle("Sample Application");
您可以使用方法
primaryStage.setScene(scene);
使用名为
primaryStage.show();
通过调用静态方法 launch()启动JavaFX应用程序
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窗口,如下所示.
我们还可以在JavaFX场景中嵌入文本.此示例显示如何在JavaFX中嵌入文本.
以下是步骤 :
创建Java类并继承包 javafx.application 的 Application 类并实现此方法的 start()方法类如下.
public class DrawingLine extends Application { @Override public void start(Stage primaryStage)抛出异常{ } }
您可以将文本嵌入通过实例化属于包 javafx.scene.shape 的名为 Text 的类来实现JavaFX场景,实例化此类.
你可以通过传递要嵌入的文本来实例化此类,以String格式或者,您可以使用默认构造函数创建文本对象,如下所示.
//创建文本对象 文本文本= new Text();
您可以使用 setFont()将字体设置为文本 Text 类的方法.此方法接受字体对象作为参数.将给定文本的字体设置为45,如下所示.
//将字体设置为文本 text.setFont(new字体(45));
您可以在XY平面上设置文本的位置通过使用相应的setter方法 setX()和 setY()设置X,Y坐标,如下所示.
//设置文本的位置 text.setX(50); text.setY(150);
您可以使用setText设置要添加的文本( )Text类的方法.此方法接受表示要添加的文本的字符串参数.
text.setText("Welcome to Tutorialspoint");
在 start()方法中,通过实例化名为Group的类来创建一个组对象,该类属于包 javafx.scene .
传递上一个创建的Text(节点)对象step,作为Group类构造函数的参数,以便将其添加到组中,如下所示 :
Group root = new组(文本)
通过实例化名为
除了根对象,你还可以传递两个双参数表示屏幕的高度和宽度以及Group类的对象,如下所示.
场景场景=新场景(组,600,300 );
您可以使用
使用 primaryStage 对象,将场景标题设置为示例应用程序,如下所示.
primaryStage.setTitle("Sample Application");
您可以使用方法
primaryStage.setScene(scene);
使用名为
primaryStage.show();
通过调用静态方法 launch()启动JavaFX应用程序
public static void main(String args[]){ launch(args); }
以下是使用JavaFX显示文本的程序.将此代码保存在名为 ShowingText.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 ShowingText.java java ShowingText
执行时,上述程序生成显示文本的JavaFX窗口,如下所示.