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 Drift - OpenGL 等对 JavaFX 的支持。无缝集成到场景图中。
- ControlsFX - JavaFX 的额外 UI 控件。
- GemsFX - JavaFX 的额外 UI 控件。
- TilesFX - JavaFX 的额外 UI 控件。
与 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/FXGLJavaFX 与 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 的最有用的书籍:
- 学习 JavaFX 8
- 使用 JavaFX 的现代 Java 客户端权威指南
JavaFX JavaDoc
您可以在此处找到 JavaFX 11 JavaDoc:
https://openjfx.io/javadoc/11/