JavaFX概览

Posted 从零开始的智障生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX概览相关的知识,希望对你有一定的参考价值。

1. JavaFX概述

JavaFX 是一组图形和媒体包,使开发人员能够设计、创建、测试、调试和部署在不同平台上一致运行的富客户端应用程序。

目录

1. JavaFX概述

JavaFX 应用程序

可用性

我可以使用 JavaFX 构建什么?

初试在eclipse中运行JavaFX示例应用程序

初试在CMD中运行JavaFX示例程序

 再次尝试在eclipse中运行JavaFX示例程序

 非模块化项目

为eclipse创建JavaFX用户库

新建JavaFX项目 

 添加JavaFX类

添加虚拟机参数

运行项目

配置eclipse环境变量

初试用Maven构建JavaFX非模块化项目

创建一个Maven项目

验证pom

验证主类

运行项目


2. JavaFX 应用程序

由于 JavaFX 库是作为 Java API 编写的,因此 JavaFX 应用程序代码可以从任何 Java 库中引用 API。例如,JavaFX 应用程序可以使用 Java API 库来访问本机系统功能并连接到基于服务器的中间件应用程序。

可以自定义 JavaFX 应用程序的外观和感觉。级联样式表 (CSS) 将外观和样式与实现分开,以便开发人员可以专注于编码。图形设计人员可以通过 CSS 轻松自定义应用程序的外观和样式。如果您有网页设计背景,或者如果您想将用户界面 (UI) 和后端逻辑分开,那么您可以使用 FXML 脚本语言开发 UI 的表示方面,并为应用程序使用 Java 代码逻辑。如果您更喜欢在不编写代码的情况下设计 UI,那么请使用 JavaFX Scene Builder。在您设计 UI 时,Scene Builder 创建可移植到集成开发环境 (IDE) 的 FXML 标记,以便开发人员可以添加业务逻辑。

3. 可用性

JavaFX API 作为 Java SE 运行时环境 (JRE) 和 Java 开发工具包 (JDK) 的完全集成功能提供。因为 JDK 可用于所有主要桌面平台(Windows、Mac OS X 和 Linux),所以编译到 JDK 7 及更高版本的 JavaFX 应用程序也可以在所有主要桌面平台上运行。JavaFX 8 还提供了对 ARM 平台的支持。适用于 ARM 的 JDK 包括 JavaFX 的基础、图形和控件组件。

跨平台兼容性为 JavaFX 应用程序开发人员和用户提供了一致的运行时体验。

JDK 下载页面上,您可以获得 JavaFX 示例应用程序的 zip 文件。示例应用程序提供了许多代码示例和片段,通过示例展示了如何编写 JavaFX 应用程序。请参阅“如何运行示例应用程序?” 想要查询更多的信息。

4. 主要特点

JavaFX 8 及更高版本中包含以下功能。在 JavaFX 8 版本中引入的项目相应地指出:

  • Java APIs。JavaFX 是一个 Java 库,由用 Java 代码编写的类和接口组成。这些 API 旨在成为 Java 虚拟机 (Java VM) 语言(例如 JRuby 和 Scala)的友好替代品。

  • FXML 和 Scene Builder(场景生成器)。FXML 是一种基于 XML 的声明性标记语言,用于构建 JavaFX 应用程序用户界面。设计人员可以在 FXML 中编码或使用 JavaFX Scene Builder 以交互方式设计图形用户界面 (GUI)。Scene Builder 生成可移植到 IDE 的 FXML 标记,开发人员可以在其中添加业务逻辑。

  • WebView(网络视图)。一个 Web 组件,它使用 WebKithtml 技术使在 JavaFX 应用程序中嵌入网页成为可能。WebView中运行的javascript可以调用Java API,Java API可以调用WebView中运行的JavaScript。JavaFX 8 中添加了对其他 HTML5 功能的支持,包括 Web Sockets、Web Workers 和 Web Fonts,以及打印功能。请参阅向 JavaFX 应用程序添加 HTML 内容

  • Swing interoperability(Swing 互操作性)。现有的 Swing 应用程序可以使用 JavaFX 功能进行更新,例如丰富的图形媒体播放和嵌入的 Web 内容。SwingNode类,使您可以嵌入Swing的内容进JavaFX应用程序,已在JavaFX 8见添加了SwingNode API的javadocJavaFX的应用程序中嵌入的Swing内容以获取更多信息。

  • Built-in controls(内置 UI 控件) 和 CSS。JavaFX 提供了开发全功能应用程序所需的所有主要 UI 控件。可以使用标准 Web 技术(例如 CSS)为组件设置外观。DatePicker 和 TreeTableView UI 控件现在可用于 JavaFX 8 版本。有关更多信息,请参阅使用 JavaFX UI 控件。此外,CSS Styleable* 类已成为公共 API,允许对象通过 CSS 设置样式。

  • Modena theme(摩德纳主题)Modena 主题取代 Caspian 主题成为 JavaFX 8 应用程序的默认主题。通过setUserAgentStylesheet(STYLESHEET_CASPIAN)在 Application start() 方法中添加该行,Caspian 主题仍然可供您使用。有关更多信息,请参阅fxexperience.com 上的Modena 博客

  • 3D Graphics Features(3D 图形功能)。用于Shape3DBox, Cylinder, MeshView, and Sphere子类)SubScene, Material, PickResult, LightBase (AmbientLightPointLight子类)的新 API 类SceneAntialiasing已添加到 JavaFX 8 的 3D 图形库中。Camera此版本中还更新了 API 类。欲了解更多信息,请参阅入门JavaFX的3D图形文件和相应的API的javadocjavafx.scene.shape.Shape3Djavafx.scene.SubScene, javafx.scene.paint.Material, javafx.scene.input.PickResultjavafx.scene.SceneAntialiasing

  • Canvas API(画布 API)。Canvas API 支持直接在 JavaFX 场景区域内进行绘图,该区域由一个图形元素(节点)组成。

  • Printing API(打印 API)。javafx.print包已添加到 Java SE 8 版本中,并为JavaFX 打印 API提供公共类。

  • Rich Text Support(富文本支持)。JavaFX 8 为 JavaFX 带来了增强的文本支持,包括双向文本和复杂文本脚本,例如控件中的泰语和印度语,以及文本节点中的多行、多样式文本。

  • (Multitouch Support)多点触控支持。JavaFX 根据底层平台的功能提供对多点触控操作的支持。

  • Hi-DPI Support(高 DPI 支持)。JavaFX 8 现在支持 Hi-DPI 显示。

  • Hardware-accelerated graphics pipeline(硬件加速的图形管道)。JavaFX 图形基于图形渲染管道(Prism)。JavaFX 提供流畅的图形,当与支持的图形卡或图形处理单元 (GPU) 一起使用时,可以通过 Prism 快速呈现。如果系统不具有 JavaFX 支持的推荐 GPU 之一,则 Prism 默认使用软件渲染堆栈。

  • Higt-performance media engine(高性能媒体引擎)。媒体管道支持 Web 多媒体内容的播放。它提供了一个基于 GStreamer 多媒体框架的稳定、低延迟的媒体框架。

  • Self-contained application deployment model(自包含的应用程序部署 模型)。自包含的应用程序包具有所有应用程序资源以及 Java 和 JavaFX 运行时的私有副本。它们作为本机可安装包分发,并提供与该操作系统本机应用程序相同的安装和启动体验。

5. 我可以使用 JavaFX 构建什么?

使用 JavaFX,您可以构建多种类型的应用程序。通常,它们是跨多个平台部署的网络感知应用程序,并在具有音频、视频、图形和动画的高性能现代用户界面中显示信息。

6. 初试在eclipse中运行JavaFX示例应用程序

本节中的步骤解释了如何下载和运行可通过 Java 平台 单独下载的示例应用程序。

首先要有一个eclipse和JDK,然后,在工具栏的Help->Install New Software

 点击Add,输入以下内容:

Name:ec(fx)lipse

Location:http://download.eclipse.org/efxclipse/updates-released/3.6.0/site/

 会出现以下两个选项:全部选中,然后一直next到finish。

 等待安装完成,会提示重启,当重启提示跳出,然后重启。(别刚安装就重启)

 每次当你想要使用JavaFX时,会跳出来:

 

您没有用Java8运行您的eclipse实例。因此,JavaFX工具被禁用。使Java8成为默认的系统Java,或者调整您的eclipse.ini以将vm指向您的Java8安装。 如果您想关闭此检查,请打开您的首选项,转到常规>启动和关闭,并取消选中“JavaFX工具Java检查”。

先尝试一下,看非Java 8环境能否使用:

 这里面的Main.java文件没有在JDK库中找到javafx这个包,我的Java是16版的,现在改用Java8。

参考链接:Java 更改 JDK

修改之后,就没有报错了。 

尝试运行,出现以下报错信息:

Exception in thread "main" java.lang.UnsupportedClassVersionError: application/Main has been compiled by a more recent version of the Java Runtime (class file version 60.0), this version of the Java Runtime only recognizes class file versions up to 52.0

线程“main”中出现异常Java . lang . unsupportedclassversionerror:应用程序/Main已由较新版本的Java Runtime编译(类文件版本60.0),此版本的Java Runtime仅识别高达52.0的类文件版本。

这个是由于JAVA字节码,不同版本间的兼容性原因。相关内容参考:https://blog.csdn.net/qq_34028001/article/details/120106355

现在我用了Java8不支持,Java16不可以,那么只能想其他办法了。

检查原因后,发现是因为,如果用e(fx)clipse插件,则必须确保运行的至少是3.6.0版本,而我上面安装的是2.3.0,所以我们将其改为只要将上面的链接的数字改成3.7.0。重复上述步骤。

然后发现还是不行。同样的错误。

7. 初试在CMD中运行JavaFX示例程序

然后就到了JavaFX的官方文档了:https://openjfx.io/index.html

7.1 JavaFX下载并安装(即解压)

由于JavaFX是由JavaAPI开发实现的,所以必须首先要有一个Java,而且此Java要求是Java8以上版本,尽量是最新版,然后先下载JavaFX的软件开发环境.先到上面的链接中,下载对应平台的JavaFX。

 为了方便,把它解压到我们JDK安装的位置。然后开始设置JavaFX的环境变量。

在Windows命令行中输入如下内容:

set PATH_TO_FX="C:\\Program Files\\Java\\javafx-sdk-15.0.1\\lib"

7.2 下载JavaFX示例程序

下载JavaFX示例文件:https://github.com/openjfx/samples

 下载并解压,然后再进入HelloFX下的CLI目录下,里面有一个HelloFX.java。从这里打开命令行,先编译一下试试。因为JavaFX从Java11开始就已经从Java发行版中分离。

7.3 编译并运行示例程序

在Linux终端中输入如下内容:

javac --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX.java

在Windows中输入如下内容:

javac --module-path %PATH_TO_FX% --add-modules javafx.controls HelloFX.java

然后报了个莫名其妙的错:错误: 无效的标记: Files\\Java\\javafx-sdk-15.0.1\\lib

因为我解压JavaFX的路径中有空格(Program Files),而命令行找到这个变量后,将其直接代入,那么这个空格就被当作隔开指令的内容了,所以需要在上面加上双引号。

D:\\eclipse-workspace\\samples-master\\HelloFX\\CLI\\hellofx>javac --module-path "%PATH_TO_FX%" --add-modules javafx.controls HelloFX.java

然后报了另一个错:错误: 找不到模块: javafx.controls

有是有,那又找不到,我估计javac在识别环境变量的时候,空格会把一个值分成两个,所以原因是路径中有空格。环境变量换个值:

没有了空格再次在Windows下,进入HelloFX.java所在目录,并使用如下代码编译:

javac --module-path %PATH_TO_FX% --add-modules javafx.controls HelloFX.java

 然后运行该代码:

java --module-path %PATH_TO_FX% --add-modules javafx.controls HelloFX

运行结果:

8. 再次尝试在eclipse中运行JavaFX示例程序

这种方式适用于Java11或更高版本,因为JavaFX从Java11开始从JDK中被分离出来。

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

8.1 用IDE创建非模块化项目

8.1.1 为eclipse添加JavaFX用户库

创建一个新的User Library,Eclipse -> Window -> Preferences -> Java -> Build Path -> User Libraries -> New。

 然后在此用户库下,add External JARs,为其命名并包含JavaFX lib文件夹下的jar。

8.1.2 用IDE新建JavaFX空项目 

新建项目File->New->Java Project,并为项目提供一个名称,例如HelloFX,以及一个位置默认即可。确保选择了JDK11或更高版本,因为是非模块化项目,所以不需要添加module-info.java文件。

然后为此项目添加我们上面创建的库User Library. Libraries->Classpath->Add Library...->User Library->Javafx15。

 将打开一个空项目。目录结构如下。 

 8.1.3 为空JavaFX项目添加相关类

可以添加一个主类,Main类,在此基础上,一个FXML文件和一个控制器

运行主类,报错:错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序。

显示此错误时因为Java11启动器会检查主类是否扩展javafx.application.Application.如果是这种情况,则需要将javafx.graphics模块放在模块路径上。

8.1.4 添加虚拟机参数

要解决上面的问题,先按如下单击Run->Run Configurations...->Java Application,为名为"hellofx"的项目创建一个新的启动配置并添加一下VM参数。

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

 注意这里"\\path\\to\\javafx-sdk-11\\lib",是自己安装的JavaFX的库路径,别直接复制上去。

eclipse有些版本还会有XstartOnFirstThread相关的选项,确保未选中

8.1.5 运行项目

单击菜单栏Run或右键文件Run->Run As->Java Application.

8.1.6 配置eclipse环境变量

Eclipse->Preferences->Run/Debug->String Substitution->New...

 这里eclipse环境变量的设法与Windows系统环境变量的设法十分相似。然后将其应用于VM参数。

但这里其实是eclipse的字符串替换,但其实Windows也差不多。而eclipse的字符串替换格式与UNIX和Linux操作系统一样,与Windows不同。即只能用$PATH_TO_FX,而不能用%PATH_TO_FX%。

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

8.2 用Maven构建JavaFX非模块化项目

8.2.1 创建一个Maven项目

方式一:第一次需要添加JavaFX原型(archetypes)时:选择Add Archetype...并键入:

Archetype Group ID: org.openjfx

Archetype Artifact ID: javafx-achetype-simple或javafx-archetype-fxml

Archetype Version: 0.0.6

这种是直接给定值(三个字段值)特定的筛选方式,如下图所示。

方式二: 也可以通过关键字直接先找出org.openjfx的相关项。在过滤器字段(filter)中键入org.openjfx,并根据项目中是否使用FXML来选择javafx-archetype-simple 或 javafx-archetype-fxml。

 选中这个javafx-archetype-fxml后双击或Next >对其进行编辑。如下图所示。

项目名设为hellofx-maven,将javafx-verion可以设为15.0.1.

当这个项目创建完成,项目结构如下图所示:

 右键项目名->properties->Java Build Path->Libraries,确保JDK的版本是11或更高。

  对于非模块化项目,可以删除module-info.java文件。

8.2.2 验证pom

编辑pom,并验证以下内容:

  • 是否有依赖项(dependencies) javafx.controls和javafx.fxml;
  • 是否有mainClass设为org,openjfx.hellofx_maven.App的javafx-maven-plugin。

Maven 管理需要的依赖项:它将会增加被javafx.controls和javafx.fxml需求的javafx.base和javafx.graphics。

但最重要的是,它将根据您的平台添加所需的分类器,下载特定平台的jar。

对任何其他Maven依赖项,可以在本地.m2存储库中找到这些jar。

<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-maven</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>15.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>15.0.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.6</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running -->
                        <!-- Usage: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                            <mainClass>org.openjfx.hellofx_maven.App</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

8.2.3 验证主类

验证项目包含源代码文件,如App主类。

8.2.4 运行Maven项目

单选主类App.java运行,运行结果如下:

 但是,当我们真对项目名进行运行时,右键项目名->Run As->Maven Build->

 按照默认值,直接Run。结果报错:

[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]

即必须要为上面 Goals 字段指定有效的声明周期阶段或目标。那么我们为此Maven项目配置目标。

右键项目名:Run->Run As-> Maven Build->New launch configuration以创建新配置。

运行项目,右键项目名->Run As->Maven Build->hellofx-maven->Run.报错:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project hellofx-maven: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

即找不到编译器,查看一下JDK版本,发现用的是Java8的jre,必须要使用Java11或更高的版本,并且必须提供JDK才行。

右键项目名->Run As->Run configurations->左边栏找到Maven Build->hellofx-maven->JRE->alternate JRE->选择更高版本的JDK,且不能是JRE(因为这里是源码还未经过编译)。

 运行成功,结果如上图运行结果所示。

8.3 用IDE创建JavaFX模块化项目

8.3.1 下载JavaFX jmod并安装(即解压)

JavaFX jmod下载路径:https://gluonhq.com/products/javafx/

 我们将其解压到JavaFX的安装目录下。javafx-jmod-16.

然后配置环境变量。PATH_TO_FX_MODS:C:\\JavaFX\\javafx-jmods-16。

8.3.2 创建一个Java项目

File -> New -> Java Project

将输出文件夹选择为 hellofx-IDE-module。

 

将JavaFX的库添加到类路径。

 设置模块名。打开一个空项目。

 项目目录结构如下图所示:

 

 创建一个包org.openjfx并增加一个继承了 Application 主类 MainApp。

 

 8.3.3 编辑 module-info.java

 module-info.java 包括要求的javafx.controls和javafx.fxml;

由于FXML使用反射去访问模块中的控制器,因此必须将其打开到javafx.fxml

最终,导出包org.openjfx。

8.3.4 增加JavaFX类

在包org.openjfx下新建四个文件:

主类文件:MainApp.java

控制器文件:FXMLController.java

FXML文件:scene.fxml

CSS文件:styles.css

项目结构如下:

package org.openjfx;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application

	public static void main(String[] args) 
		launch(args);
	

	@Override
	public void start(Stage stage) throws Exception 
		Parent root = FXMLLoader.load(getClass().getResource("scene.fxml"));
		Scene scene = new Scene(root);
		scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm());
		stage.setTitle("JavaFX 15");
		stage.setScene(scene);
		stage.show();
	

package org.openjfx;

import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class FXMLController 
	@FXML
	private Label label;
	public void initialize() 
		String javaVersion = System.getProperty("java.version");
		String javafxVersion = System.getProperty("javafx.version");
		label.setText("Hello, JavaFX "+javafxVersion+"\\nRunning on Java "+javaVersion+".");
	

 scene.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.StackPane?>


<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.openjfx.FXMLController">
   <children>
      <Label fx:id="label" text="Label" />
   </children>
</StackPane>
.button 
    -fx-text-fill: blue;

 8.3.5 增加VM选项

 作为一个模块项目,并且由于我们已经增加JavaFX15库到module-path模型路径,没有必要增加任何VM参数。

Warning: Make sure the checkbox "Use the -XstartOnFirstThread argument when launching with SWT" is not checked.

8.3.6 运行项目

8.3.7 创建自定义运行时映像

我们已经在8.3.1 节中创建了环境变量,所以进入项目目录中,D:\\eclipse-workspace\\Hello-IDE-module,在终端命令行中运行以下指令:

创建自定义运行时映像

jlink --module-path "%PATH_TO_FX_MODS%;bin\\hellofx" --add-modules=hellofx --output HelloFX-module-output

--module-path:指定模块路径。如果未指定,将使用JDK的jmods目录(如果存在该目录,一般位于JDK的目录下)。如果指定,但它不包含java.base模块,则将添加JDK的jmods目录(如果存在该目录)。PATH_TO_FX_MODS=C:\\JavaFX\\javafx-jmods-16,保存了JavaFX的所有JMOD文件。D:\\eclipse-workspace\\Hello-IDE-module\\bin\\hellofx中保存了应用程序的所有JMOD文件

--add-modules:除了初始模块之外,要解析的根模块。这里只有一个模块hellofx要解析。如果有多个模块,还要指定launcher模块。

--output:指定运行时映像将被复制的目录。

列出此应用程序所要用到的所有模块

HelloFX-module-output\\bin\\java --list-modules

运行此模块对应用程序

HelloFX-module-output\\bin\\java -m hellofx/org.openjfx.MainApp

整体过程:

 运行结果:

 8.4 用Maven创建JavaFX模块化项目

8.4.1 创建一个Maven项目

以下步骤与上面8.2的步骤一样。

 File -> Properties -> Java Build Path -> Libraries修改成JDK16。

 8.4.2 确认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-Maven-module</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>16</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>16</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.6</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running -->
                        <!-- Usage: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                            <mainClass>org.openjfx.HelloFX_Maven_module.App</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

 8.4.3 确认代码

编辑module-info类,将模块名从org.openjfx.HelloFX_Maven_module改HelloFX_Maven_module。

module HelloFX_Maven_module 
    requires javafx.controls;
    requires javafx.fxml;

    opens org.openjfx.HelloFX_Maven_module to javafx.fxml;
    exports org.openjfx.HelloFX_Maven_module;

确认包含源码文件,如App主类。

 8.4.4 运行项目

 Run -> Run As -> Maven Build -> New launch configuration

 跟之前报的错一样:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project HelloFX-Maven-module: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

 右键项目名->Run As->Run configurations...->JRE

 

 8.4.5 创建一个本地运行时映像

 编辑 Run Configurations,将其goals改成clean javafx:jlink。

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于JavaFX概览的主要内容,如果未能解决你的问题,请参考以下文章

搜索输入 GET/POST 数据无法理解来自 MySQL DB 的 utf8_unicode_ci 泰语数据

如何在java中将数字转换为泰语单词

右对齐包含泰语字符的字符串

使用 javafx 从 webview 获取内容

JavaFX区分拖动和单击

如何修复 javafx 中的渲染错误(ComboBox、ListView)