JavaFX 官方文档翻译

??? ? weblog 你我凑二而成三,我独自一人永不及 本文由博客端 https://www.runnable.run 主动推送

官方文档地址:JavaFX

介绍

JavaFX 允许你创建具有现代、硬件加速的用户界面的 Java 应用程序,并且具有高度的可移植性。

JavaFX 有详细的参考文档,这个简短的教程将告诉你如何编写一个 JavaFX 15 应用程序。

关于如何在移动平台上运行 JavaFX 应用程序的信息,请参见《Gluon Mobile 入门》

关于 JavaFX 11 的长期支持(LTS)的信息,请参见 JavaFX 长期支持选项。

JavaFX 建立在 JDK 之上,是一个独立的组件。开发 JavaFX 应用程序有两种不同的选择。

在任何情况下,对于这两个选项,都要求有最新版本的 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 可以被用来创建一个使用 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'
    }
}

来生成和运行自定义 image

windows

gradlew jlink
build\image\bin\hellofx

linux/mac

./gradlew jlink
build/image/bin/hellofx

自定义 JDK+JavaFX image

你可以使用 jlink 来创建一个包括部分或全部 JavaFX 模块的 runtime image,而不附在某个项目上。

有了这个 image,你就可以运行 JavaFX 模块化或非模块化项目,把它作为 IDE 中的新 JRE 来创建常规的 JavaFX 项目,甚至可以使用它的 jlink 命令来为你的项目创建一个新的自定义 image。

例如,你可以创建一个包含 java.se 模块和 JavaFX 模块的镜像,通过运行。

windows

set PATH_TO_FX_MODS="path\to\javafx-jmods-15.0.1"
%JAVA_HOME%\bin\jlink --module-path %PATH_TO_FX_MODS% \
    --add-modules java.se,javafx.fxml,javafx.web,javafx.media,javafx.swing \
    --bind-services --output \path\to\jdkfx-15.0.1

linux/mac

export PATH_TO_FX_MODS=path/to/javafx-jmods-15.0.1
$JAVA_HOME/bin/jlink --module-path $PATH_TO_FX_MODS \
    --add-modules java.se,javafx.fxml,javafx.web,javafx.media,javafx.swing \
    --bind-services --output /path/to/jdkfx-15.0.1.jdk

使用自定义的 image

通过这个自定义 image,你可以设置一个新的 JAVA_HOME。

windows

set JAVA_HOME="path\to\jdkfx-15.0.1"

linux/mac

export JAVA_HOME=/path/to/jdkfx-15.0.1.jdk

由于 JavaFX 模块已经是运行时的一部分,现在你可以运行 HelloFX 例子而不需要再添加 PATH_TO_FX,比如:

windows

dir /s /b src\*.java > sources.txt & javac -d mods/hellofx @sources.txt & del sources.txt
java --module-path mods -m hellofx/hellofx.HelloFX

linux/mac

javac -d mods/hellofx $(find src/ -name "*.java")
java --module-path mods -m hellofx/hellofx.HelloFX

或将 image 添加到你的 IDE 中。

Adding JDK+FX platform

并开始用 JavaFX 类创建 Java 项目。

Create JavaFX project

并在没有任何额外选项的情况下运行它们。

Run JavaFX project

注意:这个自定义的 JRE 是针对特定平台的,它不打算用于分发,如果有一个新的 JDK 或新的 JavaFX SDK,它必须重新创建。不过,它的 jlink 工具可以用来创建一个带有项目的自定义镜像,可以进行分发。而 jpackage tool 可用于分发带有 jlinked 项目的安装程序。

非模块化应用

从 Java 9 开始,应用程序应该是模块化的,并且用 jlink 这样的工具来分发。然而,如果你有一个非模块化的 JavaFX 项目,或者你不能使用 jlink,因为你有非模块化的依赖关系,而自动模块命名惯例并不适用,你仍然可以创建一个 fat jar。

正如这里所解释的,为了创建一个包含所有必要的 JavaFX 依赖项的可运行 jar,你需要使用一个不从 Application 扩展的启动器类。

这个问题的原因

Maven

如果你使用 Maven 开发 JavaFX 应用程序,你就不必下载 JavaFX SDK 了。只需在 pom.xml 文件中指定你想要的模块和版本,构建系统就会下载所需的模块,包括你所在平台的本地库。

在这个 project 中可以找到一个简单的 Maven 例子。pom.xml 文件展示了如何用 Maven shade 插件为这个 hellofx 项目创建可运行的 fat jar。

运行该插件以创建 fat jar。

mvn compile package

运行该应用程序,使用:

windows

java -jar shade\hellofx.jar

linux/mac

java -jar shade/hellofx.jar

跨平台 jar

你可以通过在你的 pom 文件中加入需要本地库的三个平台的依赖项来创建一个跨平台的 fat jar,在这个例子中只有 javafx.graphics 中的依赖项:

<dependencies>
        ...
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>15.0.1</version>
            <classifier>win</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>15.0.1</version>
            <classifier>linux</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>15.0.1</version>
            <classifier>mac</classifier>
        </dependency>
    </dependencies>

Gradle

如果你使用 Gradle 开发你的 JavaFX 应用程序,你不必下载 JavaFX SDK。只要在 build.gradle 文件中指定你想要的模块和版本,构建系统就会下载所需的模块,包括你平台的本地库。然而,对于 Gradle,我们需要找到并指定平台/操作系统作为分类器。

在这个 project 中可以找到一个简单的 Gradle 例子。为了用 Gradle 为这个项目创建一个可运行的 fat jar,请修改 build 文件中的 jar 任务,以包括启动器类:

mainClassName = 'hellofx.HelloFX'
jar {
    manifest {
        attributes 'Main-Class': 'hellofx.Launcher'
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

现在运行这个任务来创建 fat jar 并且运行它

windows

gradlew.bat jar

java -jar build\libs\hellofx.jar

linux/mac

./gradlew jar

java -jar build/libs/hellofx.jar

跨平台 jar

你可以通过在构建文件中添加需要本地库的三个平台的依赖项来创建一个跨平台的 fat jar,在这个例子中只有 javafx.graphics 中的依赖项。

runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:win"
runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:linux"
runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:mac"

现在再次运行 jar 任务以创建跨平台的 fat jar。

命令行

最后,你也可以在命令行上为你的 JavaFX 项目创建一个可运行的 fat jar。

警告: 这是一个令人沮丧的、乏味的、容易出错的手工过程,在 jlink 不适用的情况下,应该使用 Maven 的 shade 插件或 Gradle 的 jar 任务来避免。

在这个 project.中可以找到一个例子。为你的操作系统下载相应的 JavaFX SDK,并将其解压到所需位置。

添加一个环境变量,指向运行时的 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

编译这个项目

windows

dir /s /b src\main\java\*.java > sources.txt & javac --module-path %PATH_TO_FX% --add-modules=javafx.controls -d out @sources.txt & del sources.txt

linux

javac --module-path $PATH_TO_FX --add-modules=javafx.controls -d out $(find src/main/java -name "*.java")

并创建 fat jar,加入 JavaFX 需要的 jar 和特定平台的本地库。对于 hellofx 项目。

windows

cd out & jar xf "%PATH_TO_FX%\javafx.base.jar" & jar xf "%PATH_TO_FX%\javafx.graphics.jar" & jar xf "%PATH_TO_FX%\javafx.controls.jar" & cd ..
copy "%PATH_TO_FX%\..\bin\prism*.dll" out & copy "%PATH_TO_FX%\..\bin\javafx*.dll" out & copy "%PATH_TO_FX%\..\bin\glass.dll" out && copy "%PATH_TO_FX%\..\bin\decora_sse.dll" out
del out\META-INF\MANIFEST.MF & del out\module-info.class
mkdir libs
jar --create --file=libs/hellofx.jar --main-class=hellofx.Launcher -C out .

linux

find $PATH_TO_FX/{javafx.base.jar,javafx.graphics.jar,javafx.controls.jar} -exec unzip -nq {} -d out \;

#uncomment for Linux:
#cp $PATH_TO_FX/{libprism*.so,libjavafx*.so,libglass*.so,libdecora_sse.so} out

#uncomment for Mac:
#cp $PATH_TO_FX/{libprism*.dylib,libjavafx*.dylib,libglass.dylib,libdecora_sse.dylib} out

rm out/META-INF/MANIFEST.MF out/module-info.class
mkdir libs
jar --create --file=libs/hellofx.jar --main-class=hellofx.Launcher -C out .

而在 jar 建立后,你可以运行它。

java -jar libs\hellofx.jar

linux/mac

java -jar libs/hellofx.jar

注意:这个 JRE 是特定平台的。然而,如果每个平台的不同本地库都包含在内,它可以很容易地成为一个多平台的 jar。这需要下载所有平台的 JavaFX SDK,提取所有必要的 jar(例如,javafx.graphics 在每个平台都是不同的),并复制所有的本地库,如上所示。正如上面提到的,这个过程不应该手动完成。

JavaFX and IntelliJ IDEA

本节介绍如何在 IntelliJ IDEA 中创建一个 JavaFX 应用程序。在 IDE 的截图中使用了 JavaFX 15.0.1 和 IntelliJ IDEA 2020.1。

为你的操作系统下载一个合适的 JDK,并将 JAVA_HOME 设为 JDK 目录。更多信息请参考 Install Java 部分。

你可以创建一个 JavaFX 模块化或非模块化项目,并使用 IDE 工具、Maven 或 Gradle 构建工具。

非模块化应用

IDE

按照这些步骤创建一个 JavaFX 非模块化项目,并使用 IDE 工具来构建和运行它。或者,你也可以从这里下载一个类似的项目。

为你的操作系统下载相应的 JavaFX SDK,并将其解压到所需位置,例如 /Users/your-user/Downloads/javafx-sdk-15

1. 创建 JavaFX project

Create a JavaFX project

为项目提供一个名称,如 HelloFX,和一个位置。当项目打开时,JavaFX 类是无法识别的。

Missing JavaFX classes

2. Set JDK 15

进入 File -> Project Structure -> Project,并将项目的 SDK 设置为 15。你也可以把语言级别设置为 11 或更高。

Set JDK 11

3. Create a library

进入 File -> Project Structure -> Libraries,将 JavaFX 15 SDK 作为一个库添加到项目中。指向 JavaFX SDK 的 lib 文件夹。

Create Library

一旦库被应用,JavaFX 类将被 IDE 识别。

JavaFX classes are recognized

警告:如果你现在运行该项目,它将被编译,但你会得到这个错误。

Caused by: java.lang.RuntimeException: Exception in Application start method
	at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
...
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0xXXXXX) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0xXXXXX
...

发生这个错误是因为 IntelliJ 只把 javafx.basejavafx.graphics 模块添加到模块路径中,但对于这个例子来说,还需要添加 javafx.controlsjavafx.fxml 模块。

4. 添加 VM 选项

要解决这个问题,请点击 "Run -> Edit Configurations... "并添加这些虚拟机选项。

windows

--module-path "\path\to\javafx-sdk-15.0.1\lib" --add-modules javafx.controls,javafx.fxml

linux/mac

--module-path /path/to/javafx-sdk-15.0.1/lib --add-modules javafx.controls,javafx.fxml

注意: IntelliJ 创建的默认项目使用 FXML,所以 javafx.fxmljavafx.controls 是必需的。如果你的项目使用其他模块,你也需要添加它们。

VM options

点击应用并关闭对话框。

另外,你也可以定义一个全局变量,可以在未来的项目中使用。进入 Preferences (File -> Settings) -> Appearance & Behavior -> Path Variables,将变量的名称定义为 PATH_TO_FX,并浏览到 JavaFX SDK 的 lib 文件夹来设置其值,然后点击应用。

Path Variable

然后你可以在设置虚拟机选项时参考这个全局变量,如:

--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml

Path Variable in VM options

5. 运行项目

点击 Run -> Run... 来运行该项目,现在它应该可以正常工作了。

Maven

按照这些步骤创建一个 JavaFX 非模块化项目,并使用 Maven 工具来构建和运行它。另外,你也可以从这里下载一个类似的项目。

1. 创建一个 Maven 项目

选择 File -> New -> Project -> Maven 然后 选中 Create from archetype. 如果 JavaFX archetype 尚未安装,请选择 add archetype...并设置 groupId(org.openjfx)、artifactId(javafx-maven-archetypes)和版本(0.0.5),然后按下确定。

JavaFX Archetype

安装之后,选择这个 artifact,按 Next,并提供项目的名称,如 HelloFX 和项目的位置。也可以选择提供 groupId,比如 org.openjfxartifactId,比如 hellofx

根据项目中是否使用 FXML,在 javafx-archetype-fxmljavafx-archetype-simple 之间选择 artifactId 的原型。

Select archetype

你也可以为 javafx-version 创建一个属性,并将其设置为 15.0.1。

2. 验证项目

你可以在这里找到生成的 pom 文件。

确认它包括 javafx.controlsjavafx.fxml 依赖项,并包括 javafx-maven-plugin

Generated pom

打开 module-info 类,它包括了所需的模块 javafx.controlsjavafx.fxml。由于 FXML 使用反射来访问模块中的控制器,它已经被打开到 javafx.fxml

module-info

3. 运行项目

你可以打开 Maven 项目窗口,点击 HelloFX -> Plugins -> compiler -> compiler:compile 来编译项目,点击 HelloFX -> Plugins -> javafx -> javafx:run 来执行该项目。

注意:如果 JAVA_HOME 没有设置为 11 或更高,从 Maven 项目窗口运行可能会失败。为避免这种情况,您可以给 Maven Runner 添加一个环境变量。

JavaHome

或向 javafx-maven-plugin 设置正确的 java 命令。

<configuration>
	<executable>/path/to/jdk-15/bin/java</executable>
</configuration>

该项目也可以从终端运行。确保 JAVA_HOME 被设置为 15,然后运行 mvn clean javafx:run

4. 创建一个自定义 Runtime image

要创建一个自定义的运行时,使用 JavaFX Maven plugin,你可以点击 HelloFX -> Plugins -> javafx -> javafx:jlink,或者从终端将 JAVA_HOME 设置为 15 就可以运行。

mvn clean javafx:jlink

注意该插件允许像 jlink 命令一样的常规选项,以及创建一个启动器或带有自定义 image 的压缩包。

而在 image 建立后,你可以从命令行中运行它。

windows

target\hellofx\bin\launcher

linux/mac

target/hellofx/bin/launcher

Gradle

按照这些步骤来创建一个 JavaFX 模块化项目,并使用 Gradle 工具来构建和运行它。或者,你也可以从这里下载一个类似的项目。

1. 创建一个 Gradle 项目

用 Java 创建一个 Gradle 项目。为项目提供一个名字,比如 HelloFX 和项目的位置。可以选择提供 groupId,如 org.openjfx,artifactId,如 hellofx。当项目打开时,添加一个包 org.openjfx 和一个空的 MainApp 类。

2. 修改构建

编辑 build.gradle 文件,用这个 build 文件替换它,相应地将 mainClassName 设置为 org.openjfx.MainApp。

注意 org.openjfx.javafxplugin 插件的使用,它消除了添加 JavaFX 依赖项和为它们的编译和运行任务设置模块路径的必要性。

Update the build

3. 添加模块信息类

添加 module-info 类,包括需要的模块 javafx.controlsjavafx.fxml。因为 FXML 使用反射来访问模块中的控制器,所以必须将其开放给 javafx.fxml。最后,导出包 org.openjfx.com

4. 添加源代码

Based on this MainApp class, add its content to the project main class. Then add the controller and the FXML and and the css files.

基于这个 MainApp 类,将其内容添加到项目主类中。然后添加 controllerFXML 和和 css 文件。

source code

5.运行这个项目

你可以打开 Gradle 窗口,点击 hellofx->Tasks->build->build 来构建项目,点击 hellofx->Tasks->application->run 来执行该项目。你也可以打开终端并运行。

windows


gradlew run

linux/mac

./gradlew run
6. 创建一个自定义的 runtime image

要创建一个 runtime image,你可以使用 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', 'javafx.fxml' ]
}

jlink {
    launcher {
        name = 'hellofx'
    }
}

来生成自定义的 image。运行 hellofx -> Tasks -> build -> jlink 任务来创建 image

要运行该 image,请在终端上输入

windows

build\image\bin\hellofx

linux/mac

build/image/bin/hellofx

JavaFX 和 NetBeans

改日再更

JavaFX 和 Eclipse

改日再更

接下来的步骤

恭喜你成功创建并运行了你的第一个 JavaFX 应用程序。

如果您想为 JavaFX 做出贡献,请访问我们的 Github 资源库

请通过我们的电子邮件支持与我们联系。我们很乐意听到您的意见!

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...