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。
- 核
-
- 阶段
- 场景
- 节点
- 特性
- FXML
- 布局
-
- 地区
- 窗格
- HBox
- 盒子
- 流窗格
- 瓷砖窗格
- 网格窗格
- 团体
- 堆栈窗格
- 锚点窗格
- 边框窗格
- 基本控制
-
- 标签
- 按钮
- 菜单按钮
- 拆分菜单按钮
- 按钮栏
- 切换按钮
- 单选按钮
- 复选框
- 选择框
- 组合框
- 列表显示
- 文本域
- 密码字段
- 文本区域
- 图像视图
- 日期选择器
- 选色器
- 滑块
- 工具提示
- 超链接
- 进度条
- 进度指示器
- 菜单栏
- 上下文菜单
- 分隔器
- 表视图
- 树视图
- 树表视图
- HTML编辑器
- 分页
- 文件选择器
- 目录选择器
- 微调器
- 容器控件
-
- 手风琴
- 标题窗格
- 选项卡窗格
- 拆分窗格
- 滚动窗格
- 网络
-
- 网络视图
- 网络引擎
- 图表
-
- 饼形图
- 条形图
- 堆积条形图
- 散点图
- 折线图
- 面积图
- 堆积面积图
- 气泡图
- 其他概念
-
- 字体
- 文本格式化程序
- 对话框
- 颜色
- 2D 形状
- 3D 形状
- 效果
- 转型
- 动画片
- 帆布
- 像素缓冲区
- 拖放
- 声音的
- 视频
- 打印 API
- 高 DPI 分辨率屏幕支持
- JavaFX 中的并发
第三方 JavaFX 资源
有一些很酷的第三方资源可用。我在这里列出了其中一些:
- 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或流协议等)的应用程序,本机/本地应用程序也应该是首选。 )。
用户很少使用的应用程序,或者用户没有真正动机下载和安装的应用程序可能应该保留为 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。
来自 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 存储库:
JavaFX JavaDoc
您可以在此处找到 JavaFX 11 JavaDoc: