JavaFX是 Java 的 GUI 工具包(GUI 是图形用户界面【Graphical User Interface】的缩写)。JavaFX 使使用 Java 创建桌面应用程序和游戏变得更加容易。

为什么选择 JavaFX?

JavaFX 是一个出色的 GUI 应用程序平台有几个原因。首先,Java 仍然是世界上最流行的编程语言之一,拥有大量的标准类,以及 Java 开发者社区开发的丰富的开源工具包。
其次,JavaFX 可以在以下所有操作系统和设备上运行:

  • Windows
  • Linux
  • Mac
  • iOS
  • Android / Chromebook
  • Raspberry Pi

这使得 JavaFX 成为一个通用的跨操作系统和跨设备应用程序工具包。
第三,JavaFX 带有一组丰富的 GUI 控件,并且开源工具包为整个生态系统添加了更多工具。

JavaFX 功能

JavaFX 带有大量内置的 GUI 组件,例如按钮、文本字段、表格、树、菜单、图表等等。JavaFX 可以通过 CSS 和/或以编程方式设置样式。JavaFX 带有一个内置的图表库,您可以将其用于简单的图表。JavaFX 支持 2D 和 3D 图形。JavaFX 有一个可以显示现代 Web 应用程序的 WebView。

与 JavaFX 相关的资源:

  • Skija - 用于 Java 的快速 2D 图形 - 使用硬件加速图形。

    JavaFX 应用程序

    以下是使用 JavaFX 制作的一些公开可用的应用程序,因此您可以亲自了解使用 JavaFX 的可能性:

  • DBFX - 免费的数据库管理 GUI 应用程序(管理控制台)。

    为什么选择桌面应用程序?

    为什么移动设备首选本机/本地应用程序,而台式计算机首选 Web 应用程序?为什么这两种类型的设备都不首选本机/本地应用程序?
    原生/本地应用程序往往比 Web 应用程序提供更好的用户体验,因为它响应速度更快(更快、更快捷)、具有更高级的 GUI 控件以及与本地设备更好的集成。传统桌面应用程序的两个最大问题是互联网带宽低和安装过程繁琐。随着高速互联网连接的普及,私人设备的应用商店和企业机器的按需安装系统,这两个问题都已基本解决。
    在我看来,对于所有经常使用的应用程序,或者工作流程有些复杂的应用程序,应该首选本地/本地应用程序。对于需要访问其运行的计算机的本地磁盘,或者需要与许多不同的远程系统通信,有时使用 HTTP 以外的其他协议(例如IAP或流协议等)的应用程序,本机/本地应用程序也应该是首选。 )。有关更多应用程序示例,请参阅JavaFX 用例
    用户很少使用的应用程序,或者用户没有真正动机下载和安装的应用程序可能应该保留为 Web 应用程序。例如,用于登录和管理您的保险合同的应用程序可能可以作为 Web 应用程序来实施。但是,您的用户每天使用多次的项目管理工具可能最好是桌面应用程序。

JavaFX 用例

我被问过好几次桌面应用程序是否已经死了——是否真的有任何用例可以用于 JavaFX 之类的东西。确实,许多应用程序都非常适合 Web 应用程序,因为您很少访问它们,而且您访问的资源无论如何都存储在服务器上。但是,还有几种类型的应用程序可以更好地实现为桌面应用程序。
正如介绍中提到的,我们在Nanosai实际上正在使用 JavaFX 开发桌面应用程序。我们这样做是因为该应用程序需要访问本地磁盘,需要能够通过 HTTP 以外的其他网络协议进行通信,并且需要标准 Web 浏览器根本不提供的其他几个功能。
以下是我看到的 JavaFX 的一些一般用例列表:

  • 开发者工具
    • IDE
    • 编辑
    • 文件压缩/加密工具
    • 扫描本地磁盘的工具
  • 本地系统维护工具
    • 备份工具
    • 病毒扫描
  • 实用程序
    • Skype / Messenger / 聊天
    • 屏幕截图工具
    • 照片和视频编辑
    • 视频播放器
    • 音频编辑
    • 音频播放器
  • 游戏
  • 数据科学工具

以下是我经常使用的一些桌面应用程序:

  • IntelliJ IDEA
  • 记事本++
  • 源树
  • SnagIt
  • 油灰
  • WinSCP
  • Skype
  • 信号
  • 电报
  • 照相馆
  • 首映专业版
  • 视频局域网 (VLC)
  • 易画

此外,一些开始使用 Web 应用程序的公司后来添加了本机/本地桌面应用程序。其中一些是:

  • YouTube 音乐
  • Spotify
  • 微软团队
  • 松弛
  • 谷歌云端硬盘

    移动设备上的 JavaFX

    Gluon提供了一组工具来帮助您将 JavaFX 应用程序构建和打包为移动设备(Android 和 iOS)的本机映像。

    树莓派上的 JavaFX

    也可以在 Raspberry Pi 计算机上运行 JavaFX。您可以在 Raspberry Pi 上的Java 入门一书中阅读有关如何在 Raspberry Pi 上运行 JavaFX 的更多信息

    来自 Java 11 的 JavaFX

    从 Java 11 开始,JavaFX 已再次从 Java SDK 中删除。JavaFX 已分离到它自己的开源项目中。这意味着要从 Java 11 / JavaFX 11 下载 JavaFX,您必须访问:
    http://openjfx.io
    然而,JavaFX 不断发展,并且在其用户中仍然非常受欢迎。

    JavaFX 游戏引擎

    Almas Baim 制作了FXGL JavaFX 游戏引擎。您可以在以下位置找到它:
    https://github.com/AlmasB/FXGL

    JavaFX 与 Swing

    您可能知道 Java 还有另一个称为 Java Swing(或 JFC)的 GUI 工具包。如果您想知道这两个工具包之间的区别是什么,我在下面列出了一些主要区别:
特征 JavaFX Swing
属性绑定 JavaFX 属性支持绑定,这意味着您可以监听其值的变化。 Swing 属性不直接支持绑定。
声明式布局 JavaFX 支持通过 FXML 进行声明式布局。 Swing 没有对声明式布局的内置支持。
造型 JavaFX 支持基于 CSS 和基于代码的样式。 Swing 仅支持基于代码的样式。
网络视图 JavaFX 有一个可以呈现现代网页的 WebView。 Swing 没有 WebView。
图形 JavaFX 使用基于矢量的图形。 Swing 使用基于像素的图形。
3D 图形 JavaFX 具有对 3D 图形的内置支持。 Swing 需要用于 3D 图形的 Java 3D API。
并发 API JavaFX 有一个内置的并发 API。 Swing 没有内置的并发 API。
工具包的时代 JavaFX 较新。 Swing 比较老。
包含在 Java SDK 中 Java 11 及更高版本不包含 JavaFX。 Swing 仍然包括在内,但可能有一天会被删除。

GitHub 上的 JavaFX 示例

为了您的方便,我已开始将本教程中的许多 JavaFX 示例添加到公共 GitHub 存储库。这些示例是可立即运行的独立示例,每个示例都有自己的类 + main() 方法来运行该特定示例。这是 GitHub 存储库:
GitHub 上的 JavaFX 示例
下载好的:

JavaFX 书籍

以下是我读过的关于 JavaFX 的最有用的书籍: