简介
你可以使用JavaFx创建高度可移植,现代,硬件加速的用户界面的java应用。
这里有一片关于JavaFx的详细文档(Client Technologies: Java Platform, Standard Edition (Java SE) 8 Release 8),这篇简短教程将给你展示怎样编写一个JavaFx应用
有关如何在移动平台运行JavaFx应用的资料,请移步Gluon Documentation
有关JavaFx11长期支持版的资料,请移步 JavaFX Long Term Support - Gluon
JavaFx构建在·JDK之上并且是个独立的组件。开发JavaFx应用有两种不同的选择。
使用JavaFx SDK(JavaFX - Gluon 选择 11LTS 与最新发型的版本 15.0.1)
使用构建系统(maven/gradle)下载需要的模块(选择和上述相同的版本)
无论哪种选择,都需要最新版本的JDK,或者至少JDK11
安装 Java
下载适合你操作系统的JDK,最新版本的JDK可以充官方网站下载 。 OpenJDK
一旦安装完毕,你可以在你的机器上使用java命令
检查是否安装了正确的java版本。下面是OpenJDK 15的命令行输出:
$ java -version
openjdk version "15" 2020-09-15
OpenJDK Runtime Environment (build 15+36-1562)
OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)
你需要设置JAVA_HOME 环境变量指向JDK的安装目录。可以按照以下教程( this guide )为你的主机设置JAVA_HOME。
注意: 如果你的系统安装有多个版本的JDK,你需要确保JAVA_HOME环境变量指向正确的JDK,JavaFX15需要至少JDK11 。
运行Hello Workd(通过SDK)
如果你想用JavaFx SDK 替换构建工具来开发应用,得下载合适的JavaFx 运行时,并解压到
期望的目录,对于本教程,我们将会采用JavaFx15.0.1
添加环境变量 PATH_TO_FX 指向运行时的lib目录
#window
set PATH_TO_FX="path\to\javafx-sdk-15.0.1\lib"
这会儿可以在命令行编译运行JavaFx应用了
先编译:
javac --module-path %PATH_TO_FX% --add-modules javafx.controls HelloFX.java
重点:确保添加了必须的模块,传递依赖是自动解析的(例如,无序添加javafx.graphics模块,因为它是javafx.controls模块的传递依赖)。如果你的应用使用了FXML,你需要添加javafx.fxml模块,如下所示:
javac --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml HelloFX.java
最后,运行程序:
java --module-path %PATH_TO_FX% --add-modules javafx.controls HelloFX
运行Hello Workd(通过maven)
如果你是通过maven开发JavaFx应用,则不必下载JavaFx SDK。只需要在pom.xml文件中指定依赖模块和版本,构建系统会自动下载需要的模块,包括适用于你开发平台的本地包。
示例的pom文件如下。
关联的示例项目地址:示例程序
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openjfx</groupId>
<artifactId>hellofx</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<javafx.version>17.0.1</javafx.version>
<javafx.maven.plugin.version>0.0.8</javafx.maven.plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>${javafx.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>${javafx.maven.plugin.version}</version>
<configuration>
<mainClass>HelloFX</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
或者,可以通过JavaFx Maven Archetypes 快速创建项目。简单的项目可以通过下面的命令创建。
mvn archetype:generate \
-DarchetypeGroupId=org.openjfx \
-DarchetypeArtifactId=javafx-archetype-simple \
-DarchetypeVersion=0.0.3 \
-DgroupId=org.openjfx \
-DartifactId=sample \
-Dversion=1.0.0 \
-Djavafx-version=15.0.1
JavaFx Maven构建插件
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.5</version>
<configuration>
<mainClass>HelloFX</mainClass>
</configuration>
</plugin>
</plugins>
添加maven依赖
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
</dependency>
</dependencies>
重要:传递性依赖是自动解析的 (例如,无序添加javafx.graphics模块,因为它是javafx.controls模块的传递依赖)。如果你的应用使用了FXML,你需要添加javafx.fxml模块
最后,运行程序
mvn clean javafx:run
附:HelloFx.java
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
@Override
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
Scene scene = new Scene(new StackPane(l), 640, 480);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}