Java 桌面应用程序框架与 JavaFX
Java desktop application frameworks vs. JavaFX
有很多 Java "application frameworks" 例如 http://pivot.apache.org/demos/ 中列出的那些几乎都使用 Swing 作为 GUI 工具包,或者在 Eclipse 的情况下使用 SWT。
但是我还没有看到任何明显的 JavaFX 框架。这是为什么?
如果查看框架调用你的 "Hollywood Principle",我会认为 JavaFX 已经这样做了,但后来我很困惑,因为它看起来像 Swing 和 JavaFX 的作用基本相同,即 GUI 层。但他们都做事件循环和 callbacks/events/observer 模式等
仅实现事件循环并调用事件处理程序是否不符合 "application framework" 的条件?
如果没有,是否有直接基于 JavaFX 的框架(而不是将 JavaFX 嵌入到 Swing 控件中)?这样的框架会提供哪些 JavaFX standalone 不具备的功能?
抱歉 "obviousness" 这个问题,但对我来说不是很明显。
谢谢。
对此的简单回答是:JavaFX 比 Swing 年轻得多 - 至少作为标准 JDK 库。事实上,它只是成为了 "real" 与 Java 8 的标准部分。如果您检查 history,您会看到以下事实:
- 在 JavaFX 2(2011 年发布)之前,开发人员需要学习脚本语言。
- 同样在 JavaFX 2 之前,该实现的目标是独立于平台,因此没有使用 system-specific 可以在图形和动画方面产生很大差异的资源。
通读它,您会发现一些更有趣的细节,这些细节可以概括为大多数开发人员可能只是 "seriously" 在过去 5 年左右才注意到 JavaFX . Swing 可以追溯到更早的时候(尤其是在融入标准 Java 运行时环境时),因此针对 Swing 的库自然要多于针对 FX 的库。
有很多看起来你的研究还不是很透彻
- http://efxclipse.org/ - 事实上,它利用与 Eclipse 4 IDE / RCP 4 相同的核心内容,但用 JavaFX
替换了 SWT 层
- http://www.jrebirth.org/
- http://www.drombler.org/drombler-fx/
- http://jacpfx.org/
因为我是 e(fx)clipse 的作者,所以我有偏见,但我直接知道它用于(大型)商业项目
在我看来,Swing、JavaFX 和 SWT 都是图形工具包,提供了一组基本的小部件。没有 "Application" 框架,因为它们的主要目标是显示用户界面。但是您可以使用它们通过使用基本功能来构建应用程序而无需任何其他库。
可以在此处找到一个很好的示例应用程序:https://github.com/angelicalleite/museuid
从 mysql 数据库中提取的数据看起来非常好,但是如果您仔细阅读源代码,您会注意到所有 SQL 查询都是在 UI 线程中执行的这会降低 UI 响应速度。
这是您应该使用应用程序框架的原因之一。
他们的目标各不相同且数量众多,但他们都致力于通过将复杂的事情(如多线程、消息传递)排除在您的应用程序代码之外来简化您的应用程序开发。
您的选择应根据您个人对架构和您想要使用(或不想要)的依赖项的信念来完成。
我是 JRebirth 的作者(免责声明),但我有时会看看其他框架,因此您可以通过问自己一些基本问题来做出选择:
你 want/need 支持 OSGI 吗?
=> 是 efxclipse、DromblerFX、DEMUX
=> 没有 JRebirth、JacpFX、DataFX、griffonFX、afterburner.fx
你想要一个极简主义的框架吗?
=> 是 afterburner.fx
你want/need事件消息吗?
你想分享代码吗?
你要模块化吗?
您需要 Java 7 支持吗?
您想如何管理您的应用程序线程。
我当然忘记了很多问题。
事实上,您应该使用这些应用程序框架之一(构建自己的应用程序框架将很耗时),它肯定会加快您的开发并确保它们的安全,剩下的问题是:
- 哪种 AF 能满足您的需求?
- 您和您的团队使用什么 AF 比较方便?
使用您不喜欢的模式选择 AF 可能会很痛苦,无论如何您都可以为任何可用的 AF 做出贡献,因为它们都是开源的。
希望对您有所帮助,
有很多 Java "application frameworks" 例如 http://pivot.apache.org/demos/ 中列出的那些几乎都使用 Swing 作为 GUI 工具包,或者在 Eclipse 的情况下使用 SWT。
但是我还没有看到任何明显的 JavaFX 框架。这是为什么?
如果查看框架调用你的 "Hollywood Principle",我会认为 JavaFX 已经这样做了,但后来我很困惑,因为它看起来像 Swing 和 JavaFX 的作用基本相同,即 GUI 层。但他们都做事件循环和 callbacks/events/observer 模式等
仅实现事件循环并调用事件处理程序是否不符合 "application framework" 的条件?
如果没有,是否有直接基于 JavaFX 的框架(而不是将 JavaFX 嵌入到 Swing 控件中)?这样的框架会提供哪些 JavaFX standalone 不具备的功能?
抱歉 "obviousness" 这个问题,但对我来说不是很明显。
谢谢。
对此的简单回答是:JavaFX 比 Swing 年轻得多 - 至少作为标准 JDK 库。事实上,它只是成为了 "real" 与 Java 8 的标准部分。如果您检查 history,您会看到以下事实:
- 在 JavaFX 2(2011 年发布)之前,开发人员需要学习脚本语言。
- 同样在 JavaFX 2 之前,该实现的目标是独立于平台,因此没有使用 system-specific 可以在图形和动画方面产生很大差异的资源。
通读它,您会发现一些更有趣的细节,这些细节可以概括为大多数开发人员可能只是 "seriously" 在过去 5 年左右才注意到 JavaFX . Swing 可以追溯到更早的时候(尤其是在融入标准 Java 运行时环境时),因此针对 Swing 的库自然要多于针对 FX 的库。
有很多看起来你的研究还不是很透彻
- http://efxclipse.org/ - 事实上,它利用与 Eclipse 4 IDE / RCP 4 相同的核心内容,但用 JavaFX 替换了 SWT 层
- http://www.jrebirth.org/
- http://www.drombler.org/drombler-fx/
- http://jacpfx.org/
因为我是 e(fx)clipse 的作者,所以我有偏见,但我直接知道它用于(大型)商业项目
在我看来,Swing、JavaFX 和 SWT 都是图形工具包,提供了一组基本的小部件。没有 "Application" 框架,因为它们的主要目标是显示用户界面。但是您可以使用它们通过使用基本功能来构建应用程序而无需任何其他库。
可以在此处找到一个很好的示例应用程序:https://github.com/angelicalleite/museuid
从 mysql 数据库中提取的数据看起来非常好,但是如果您仔细阅读源代码,您会注意到所有 SQL 查询都是在 UI 线程中执行的这会降低 UI 响应速度。
这是您应该使用应用程序框架的原因之一。 他们的目标各不相同且数量众多,但他们都致力于通过将复杂的事情(如多线程、消息传递)排除在您的应用程序代码之外来简化您的应用程序开发。
您的选择应根据您个人对架构和您想要使用(或不想要)的依赖项的信念来完成。
我是 JRebirth 的作者(免责声明),但我有时会看看其他框架,因此您可以通过问自己一些基本问题来做出选择:
你 want/need 支持 OSGI 吗?
=> 是 efxclipse、DromblerFX、DEMUX
=> 没有 JRebirth、JacpFX、DataFX、griffonFX、afterburner.fx
你想要一个极简主义的框架吗?
=> 是 afterburner.fx
你want/need事件消息吗?
你想分享代码吗?
你要模块化吗?
您需要 Java 7 支持吗?
您想如何管理您的应用程序线程。
我当然忘记了很多问题。
事实上,您应该使用这些应用程序框架之一(构建自己的应用程序框架将很耗时),它肯定会加快您的开发并确保它们的安全,剩下的问题是:
- 哪种 AF 能满足您的需求?
- 您和您的团队使用什么 AF 比较方便?
使用您不喜欢的模式选择 AF 可能会很痛苦,无论如何您都可以为任何可用的 AF 做出贡献,因为它们都是开源的。
希望对您有所帮助,