JavaFX官方文档翻译
官方文档地址:JavaFX
介绍
JavaFX允许你创建具有现代、硬件加速的用户界面的Java应用程序,并且具有高度的可移植性。
JavaFX有详细的参考文档,这个简短的教程将告诉你如何编写一个JavaFX 15应用程序。
关于如何在移动平台上运行JavaFX应用程序的信息,请参见《Gluon Mobile入门》
关于JavaFX 11的长期支持(LTS)的信息,请参见JavaFX长期支持选项。
JavaFX建立在JDK之上,是一个独立的组件。开发JavaFX应用程序有两种不同的选择。
- 使用JavaFX SDK(选择11 LTS、最新版本15.0.1或早期访问构建)。
- 使用构建系 统(如maven/gradle),从Maven中心下载所需的模块(也可在上述版本中选择)。
在任何情况下,对于这两个选项,都要求有最新版本的JDK 15,或者至少是JDK 11。
安装Java
跳过,记得安装Java11 ,或者Java15
使用JavaFX SDK运行HelloWorld
如果你想使用JavaFX SDK而不是构建工具,请为你的操作系统下载一个合适的JavaFX运行时,并将其解压到所需位置。在本教程中,我们将使用JavaFX 15.0.1。
添加一个环境变量,指向运行时的lib目录。
windows下
set PATH_TO_FX="path\to\javafx-sdk-15.0.1\lib"
linux/mac下
export PATH_TO_FX=path/to/javafx-sdk-15.0.1/lib
现在你可以使用JavaFX运行时从命令行编译和运行JavaFX应用程序。
编译应用程序(例如,使用本示例中的HelloFX.java),使用。
windows下
javac --module-path %PATH_TO_FX% --add-modules javafx.controls HelloFX.java
linux/mac下
javac --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX.java
重要提示:请确保添加所需的模块,同时考虑到横向依赖关系的自动解决(例如,没有必要添加javafx.graphics模块,因为它 是javafx.controls模块的过渡性需求)。但是如果你的应用程序使用FXML,你将需要添加javafx.fxml模块,如下所示。
windows下
javac --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml HelloFX.java
linux下
javac --module-path $PATH_TO_FX --add-modules javafx.controls,javafx.fxml HelloFX.java
最后,用以下方法运行该应用程序。
windows下
java --module-path %PATH_TO_FX% --add-modules javafx.controls HelloFX
linux/mac下
java --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX
使用Maven运行HelloWorld
如果您想使用Maven开发JavaFX应用程序,您不必下载JavaFX SDK。只需在pom.xml中指定你想要的模块和版本,构建系统就会下载所需的模块,包括你所在平台的本地库。
这里有一个pom.xml文件,显示了如何实现这一目标,包括在这个例子中。
担心有的同学上不了github,这里贴出来
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>16</javafx.version>
<javafx.maven.plugin.version>0.0.6</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来快速创建Maven项目。通过执行以下命令,可以创建一个简单的JavaFX项目。
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
该Pom使用了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模块添加一个依赖关系。
最后,运行应用程序(例如,基于参考样本中的HelloFX.java)。
mvn clean javafx:run
注意:请确保将 JAVA_HOME 环境变量设置为正确的 JDK 位置。
使用Gradle运行HelloWorld
与Maven类似,我们可以在build.gradle文件中声明需要的JavaFX模块。然而,对于Gradle,我们需要应用JavaFX gradle插件。
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.9'
}
接下来,我们添加所需的模块。例如,如果我们只需要javafx.controls模块,我们将包括:
javafx {
version = "15.0.1"
modules = [ 'javafx.controls' ]
}
重要提示:请注意过渡性的依赖关系是自动解决的(例如,不需要为 javafx.graphics模块添加依赖关系,因为它是由 javafx.controls模块过渡解决的)。但是如果你的应用程序使用 FXML,你将需要同时添加 javafx.fxml模块。
你可以指定一个不同的JavaFX版本。例如,如果你想坚持使用JavaFX 11.0.2。
javafx {
version = "11.0.2"
modules = [ 'javafx.controls' ]
}
这里有一个build.gradle文件,显示了如何实现这一目标,它取自这个sample.。
运行应用程序(例如,使用给定样本中的HelloFX.java),使用:
windows下
gradlew run
linux/mac下
./gradlew run
注意:我们对每个JDK的最小Gradle版本的建议如下。
| JDK version | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|
| Gradle Version | 5.0 | 5.0 | 6.0 | 6.3 | 6.3 |
Runtime images
JavaFX项目的运行时映像是一个自定义的JRE,它只包含你的应用程序所需的平台模块。
如果你想为你的JavaFX项目创建一个运行时镜像,请遵循以下说明。
为你的操作系统下载一个合适的JavaFX runtime and JavaFX jmods,并将其解压到一个想要的位置。
添加这些环境变量,指向运行时的lib目录和jmods目录。
windows下
set PATH_TO_FX="path\to\javafx-sdk-15.0.1\lib"
set PATH_TO_FX_MODS="path\to\javafx-jmods-15.0.1"
linux/mac下
export PATH_TO_FX=path/to/javafx-sdk-15.0.1/lib
export PATH_TO_FX_MODS=path/to/javafx-jmods-15.0.1
命令行
你可以从命令行中运行或创建你的JavaFX项目的Runtime image。在这个project中可以找到一个简单的例子。
该应用程序有一个单一的HelloFX.java类,其module-info文件定义了 hellofx模块。编译时可以使用JavaFX SDK。
windows下:
dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX% -d mods/hellofx @sources.txt & del sources.txt
linux下
javac --module-path $PATH_TO_FX -d mods/hellofx $(find src/ -name "*.java")
或使用JavaFX的jmods。
windows下
dir /s /b src\*.java > sources.txt & javac --module-path %PATH_TO_FX_MODS% -d mods/hellofx @sources.txt & del sources.txt
linux/mac下
javac --module-path $PATH_TO_FX_MODS -d mods/hellofx $(find src/ -name "*.java")
注意:注意,为了方便,输出被放在mods/hellofx下,但它可以使用任何其他名称。
要用java命令运行模块化的应用程序,你需要JavaFX SDK模块和你的模块添加到模块路径中。
windows下
java --module-path "%PATH_TO_FX%;mods" -m hellofx/hellofx.HelloFX
linux下
java --module-path $PATH_TO_FX:mods -m hellofx/hellofx.HelloFX
jlink
通过一个模块化的项目,jlink可以被用来创建一个使用JavaFX jmods的自定义Runtime images
windows下
jlink --module-path "%PATH_TO_FX_MODS%;mods" --add-modules hellofx --output hellofx
linux/mac下
$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS:mods --add-modules hellofx --output hellofx
而在image建立后,你可以运行它。
windows下
hellofx\bin\java -m hellofx/hellofx.HelloFX
linux/mac下
hellofx/bin/java -m hellofx/hellofx.HelloFX
注意:这个定制的JRE是特定平台的。
Maven
您可以运行或创建您的JavaFX Maven项目的runtime。在这个project.中可以找到一个简单的例子。
该应用程序有一个主类MainApp.java,其module-info文件定义了 hellofx模块。它还使用了FXML,需要在pom.xml中添加 javafx.fxml依赖项。
它可以在命令行上用 javac编译和运行,但使用Maven我们可以简单地做到:
mvn clean javafx:run
要创建一个自定义runtime,使用JavaFX Maven插件,你可以这样做:
mvn clean javafx:jlink
注意该插件允许像 jlink命令一样的常规选项,以及创建一个启动器或带有自定义image的压缩包。
而在image建立后,你可以从命令行中运行它。
windows下
target\hellofx\bin\launcher
linux下
target/hellofx/bin/launcher
Gradle
你可以运行或创建一个你的JavaFX Gradle项目的Runtime。在这个project.中可以找到一个简单的例子。
这个应用程序有一个主类HelloFX.java,它的module-info文件定义了 hellofx模块,还有必要的build.gradle文件。
它可以在命令行上用 javac编译和运行,但使用Gradle我们可以简单地做。
windows下
gradlew run
linux/mac下
./gradlew run
要创建一个自定义的运行时,可以使用上述步骤来生成一个gradle任务。另外,有一个插件可以为我们做这件事:org.beryx.jlink。它可以和JavaFX的Gradle插件相结合:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.23.1'
}
javafx {
version = "15.0.1"
modules = [ 'javafx.controls' ]
}
jlink {
launcher {
name = 'hellofx'
}
}