用于纯 Windows 桌面应用程序的 JavaFX 2 与 Swing
Posted
技术标签:
【中文标题】用于纯 Windows 桌面应用程序的 JavaFX 2 与 Swing【英文标题】:JavaFX 2 vs Swing for a pure Windows desktop app 【发布时间】:2012-05-22 04:42:24 【问题描述】:我需要编写一个桌面应用程序,而且我开始使用 Swing 已经有一段时间了,所以这两种技术都有一个学习曲线。
使用 JavaFX 2 开发我的应用程序有什么好处吗?
【问题讨论】:
相关:***.com/questions/8136079/… 要得到一个好的答案,你真的需要详细描述你想要的应用程序,否则这个问题太开放了。 【参考方案1】:4 年前我有同样的问题,并得出结论认为我最好使用 Swing,因为当时许多第三方库仍然是为 Swing 编写的。此外,来自 Sun 的 1.0 版本通常有点粗糙(我在 JSF 1.0 和 JPA 1.0 上烧毁了自己:-)。
如今,许多库都有 JavaFX 对应物或可用作 JavaFX 库。也就是说,还有很多图书馆仍然是 Swing 独有的。我还用 JavaFX 2.0 做了一些小事情,看起来真的很完整。我还没有碰到过什么炫技。
您需要检查除了 Swing / JavaFX(以及哪个)之外,您将使用多少个外部 UI 库。如果答案不是很多或很多有 Java FX 替代品(或者自己做起来很简单),我肯定会选择 JavaFX。此外,您仍然可以在 JavaFX 中使用 Swing 组件。
如前所述,JavaFX 将在未来弃用 Swing,而 Oracle 似乎致力于 JavaFX(它也将开源)。所以我强烈推荐 JavaFX。
2014 年 4 月 13 日状态更新:
JavaFX 已经开源一段时间了:https://wiki.openjdk.java.net/display/OpenJFX/Main 社区致力于JavaFX;仅 JavaFX 的库开始出现,没有对应的 swing 库。 Oracle 已被证明致力于 JavaFX。如果您在 2 年前不相信:JavaFX 现在看起来肯定是要走的路。尽管 Swing 可能会存在很长时间,但它目前处于维护模式。将大型应用程序(如 IntellIJ 或 Netbeans)完全移植到 JavaFX 需要付出很多努力。对于那些大型应用程序,目前可能不值得如此大规模的端口。
2021 年 9 月 15 日状态更新:
JavaFX 社区仍然很强大。 OpenJFX 还在那里,有一个更华丽的家。 Gluon 等公司(我不隶属于他们)为 OpenJFX 提供商业支持 LTS 版本。 GraalVM 支持 JavaFX,允许您制作 JavaFX 应用程序并将它们作为本机二进制文件分发(即不需要 JVM)。 有很多优秀的开源 JavaFX 组件库可用,例如 TilesFX。【讨论】:
“如前所述,JavaFX 将被弃用” 如谁所说?什么时候?我不会相信,除非您可以提供指向支持该声明的 Oracle 页面的链接。这种说法令人难以置信,因为 a) AWT 未被弃用,& b) 用您自己的话来说,Swing 组件可以在 Java FX 中使用。 @Thompson:我也想知道。 (或许他在想:oracle.com/technetwork/java/javafx/overview/faq-1446554.html#6) @Thompson,我认为他在那里得到了一个额外的“d”。我认为他的意思是说“JavaFX 将弃用 Swing”。见这里:oracle.com/technetwork/java/javafx/overview/faq-1446554.html#6 @Vineet 事实上,额外的“d”不应该出现在那句话中:-)。 JavaFX 不会很快被弃用(据我所知)。我删除了额外的“d”。有趣的是,一个字母如何改变句子的整个含义......【参考方案2】:两者都是不错的选择:
如果您想要一个图形增强的丰富应用程序,JavaFX 2.0 的特性可能非常吸引人。它旨在为您提供对用户体验和视觉效果的大量创造性控制。只要确保它在您的目标平台上受支持.... 如果您想要一个在尽可能多的平台上运行的标准桌面应用程序,那么 Swing 可能是更安全的选择(因为 Swing 保证可作为所有现代 Java 发行版的一部分使用)。它还具有更成熟的 3rd 方库的优势。两者都不太可能取代另一个:它们的目标用途略有不同,并且可能会在未来很多年共存。
【讨论】:
以上是关于用于纯 Windows 桌面应用程序的 JavaFX 2 与 Swing的主要内容,如果未能解决你的问题,请参考以下文章
用于从桌面访问 iOS 应用程序的文档目录的 Windows API?