JavaFX是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。
官网:openjfx.io
中文官网:openjfx.cn
1 环境准备
准备环境:IDEA、JDK17、Windows、Scene Builder
从JDK 11开始,JavaFX已经从标准JDK中移除,因此需要额外下载JavaFX的SDK来引入JavaFX库,建议通过依赖管理工具(如Maven或Gradle)来完成。
Maven在pom.xml
中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>23.0.1</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>23.0.1</version>
</dependency>
</dependencies>
若使用非Windows平台,请添加classifier
为linux
或mac
:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>23.0.1</version>
<classifier>linux</classifier> <!-- 或mac -->
</dependency>
Gradle在build.gradle
中添加:
dependencies {
implementation "org.openjfx:javafx-controls:23.0.1"
implementation "org.openjfx:javafx-fxml:23.0.1"
}
2 JavaFX快速入门
详见官方文档与教程视频。
2.1 架构图
一般情况下,JavaFX应用程序包含一个或多个对应于窗口的阶段。每个阶段都有一个场景。每个场景都可以有一个控件、布局等附加到它的对象图,称为场景图。这些概念都将在后面更详细地解释。以下是JavaFX应用程序的一般结构图示:
2.2 简单使用
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
// 继承Application抽象类,重写start方法
public class Main extends Application {
public static void main(String[] args) {
// 入口函数里调用Application的静态方法launch,之后会自动调用start方法
Application.launch(args);
}
/**
* @param primaryStage 主窗口
*/
@Override
public void start(Stage primaryStage) throws Exception {
// 设置一个场景,场景里添加一个树形组件图,先创建一个标签
Label label = new Label("Hello JavaFx!");
// 创建布局,将标签放入布局里,BorderPane布局把场景划分为上下左右中,默认加入的控件在中间位置
BorderPane pane = new BorderPane(label);
// 创建场景,将布局放入场景里,设置宽度和高度
Scene scene = new Scene(pane, 300, 300);
// 将场景设置到窗口里
primaryStage.setScene(scene);
// 设置标题
primaryStage.setTitle("我是窗口");
primaryStage.show();
}
}
3 FXML
FXML是一种可编写的、基于XML的用于构造JavaFX场景图的标记语言。在FXML中,一个FXML标签代表以下类型之一:某个类的实例,某个类实例的属性,某个静态属性,一个定义代码块,一个脚本代码块;一个FXML属性表示以下类型之一:某个类实例的属性,某个静态属性,事件处理程序。
详见官网FXML参考。
4 Scene Builder
Scene Builder作为一款Java拖拽式页面设计编码工具,具有强大的拖拽设计能力。