JavaFX - 应用程序

在本章中,我们将详细讨论JavaFX应用程序的结构,并学习使用示例创建JavaFX应用程序.

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应用程序

要创建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的节点类层次结构的图表.

WebView

准备场景

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应用程序的生命周期

JavaFX Application类有三种生命周期方法,它们是 :

  • start() : 要写入JavaFX图形代码的入口点方法.

  • stop() : 一个可以覆盖的空方法,在这里你可以编写停止应用程序的逻辑.

  • init() : 一个可以覆盖的空方法,但是你不能在这个方法中创建阶段或场景.

除了这些,它提供了一个名为 launch()的静态方法,用于启动JavaFX应用程序.

由于 launch()方法是静态的,您需要调用它从静态上下文(主要是一般).每当启动JavaFX应用程序时,将执行以下操作(按相同顺序).

  • 创建了应用程序类.

  • 调用Init()方法.

  • 调用 start()方法.

  • 启动程序等待应用程序完成并调用 stop()方法.

终止JavaFX应用程序

关闭应用程序的最后一个窗口时,将隐式终止JavaFX应用程序.您可以通过将布尔值"False"传递给静态方法 setImplicitExit()(应该从静态上下文中调用)来关闭此行为.

您可以使用方法 Platform.exit() System.exit (int)显式终止JavaFX应用程序.

示例1  - 创建空窗口

本节教您如何创建显示空窗口的JavaFX示例应用程序.以下是步骤 :

步骤1:创建类

创建Java类并继承应用程序类包 javafx.application 并按如下方式实现此类的start()方法.

public class JavafxSample extends Application {  
   @Override     
   public void start(Stage primaryStage) throws Exception {      
   }    
}

步骤2:创建组对象

start()方法中,通过实例化名为Group的类来创建组对象,该类属于包 javafx.scene ,如下所示.

Group root = new Group();

步骤3:创建场景对象

通过实例化名为场景的类来创建场景属于包 javafx.scene .对于这个类,传递在上一步中创建的Group对象(root).

除了根对象,你还可以传递两个双参数表示屏幕的高度和宽度以及Group类的对象,如下所示.

Scene scene = new Scene(root,600, 300);

步骤4:设置舞台标题

您可以使用

使用 primaryStage 对象,将场景标题设置为示例应用程序,如下所示.

primaryStage.setTitle("Sample Application");

步骤5:向舞台添加场景

您可以使用方法

primaryStage.setScene(scene);

步骤6:显示舞台内容

使用名为

 primaryStage.show();

步骤7:启动应用程序

通过调用静态方法 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窗口,如下所示.

Sample Application Plain

示例2 - 绘制一条直线

在前面的例子中,我们已经看到了如何创建一个空阶段,现在在这个例子中让我们尝试使用JavaFX库绘制一条直线.

以下是步骤 :

步骤1:创建类

创建Java类并继承包 javafx.application 应用程序类,并按如下方式实现此类的 start()方法.

public class DrawingLine extends Application {
   @Override     
   public void start(Stage primaryStage) throws Exception {     
   }    
}

第2步:创建一行

您可以通过实例化属于包 javafx.scene.shape的名为 Line 的类在JavaFX中创建一行,按如下方式实例化此类.

//创建一个行对象
 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(node)对象作为参数传递给Group类的构造函数,按顺序将其添加到组中,如下所示 :

Group root = new Group(line);

步骤5:创建场景对象

通过实例化名为场景的类来创建场景属于包 javafx.scene .对于这个类,传递在上一步中创建的Group对象(root).

除了根对象,你还可以传递两个double表示屏幕高度和宽度的参数以及Group类的对象,如下所示.

Scene scene = new Scene(group ,600, 300);

步骤6:设置舞台标题

您可以使用

使用 primaryStage 对象,将场景标题设置为示例应用程序,如下所示.

primaryStage.setTitle("Sample Application");

步骤7:向舞台添加场景

您可以使用方法

primaryStage.setScene(scene);

步骤8:显示舞台内容

使用名为

primaryStage.show();

步骤9:启动应用程序

通过调用静态方法 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窗口,如下所示.

绘图线

示例3  - 显示文本

我们还可以在JavaFX场景中嵌入文本.此示例显示如何在JavaFX中嵌入文本.

以下是步骤 :

步骤1:创建类

创建Java类并继承包 javafx.application Application 类并实现此方法的 start()方法类如下.

 
 public class DrawingLine extends Application {
 @Override 
 public void start(Stage primaryStage)抛出异常{
} 
}

第2步:嵌入文本

您可以将文本嵌入通过实例化属于包 javafx.scene.shape 的名为 Text 的类来实现JavaFX场景,实例化此类.

你可以通过传递要嵌入的文本来实例化此类,以String格式或者,您可以使用默认构造函数创建文本对象,如下所示.

 
//创建文本对象
文本文本= new Text();

第3步:设置字体

您可以使用 setFont()将字体设置为文本 Text 类的方法.此方法接受字体对象作为参数.将给定文本的字体设置为45,如下所示.

 
//将字体设置为文本
 text.setFont(new字体(45));

步骤4:设置文本的位置

您可以在XY平面上设置文本的位置通过使用相应的setter方法 setX() setY()设置X,Y坐标,如下所示.

 
//设置文本的位置
 text.setX(50); 
 text.setY(150);

步骤5:设置要添加的文本

您可以使用setText设置要添加的文本( )Text类的方法.此方法接受表示要添加的文本的字符串参数.

 
 text.setText("Welcome to Tutorialspoint");

步骤6:创建组对象

start()方法中,通过实例化名为Group的类来创建一个组对象,该类属于包 javafx.scene .

传递上一个创建的Text(节点)对象step,作为Group类构造函数的参数,以便将其添加到组中,如下所示 :

 
 Group root = new组(文本)

步骤7:创建场景对象

通过实例化名为

除了根对象,你还可以传递两个双参数表示屏幕的高度和宽度以及Group类的对象,如下所示.

 
场景场景=新场景(组,600,300 );

步骤8:设置舞台标题

您可以使用

使用 primaryStage 对象,将场景标题设置为示例应用程序,如下所示.

primaryStage.setTitle("Sample Application");

步骤9:向舞台添加场景

您可以使用方法

primaryStage.setScene(scene);

步骤10:显示舞台内容

使用名为

primaryStage.show();

步骤11:启动应用程序

通过调用静态方法 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窗口,如下所示.

JavaFX窗口显示文本