Swing与JavaFx用于桌面应用程序的比较

211

我有一个很大的程序,目前正在使用SWT。该程序可以在Windows、Mac和Linux上运行,是一个具有多个元素的大型桌面应用程序。 考虑到SWT已经有些过时了,我想切换到Swing或JavaFX。我希望听听您对以下三个问题的想法。

我的主要关注点是哪种桌面GUI应用程序更好?(我在网上查看了很多人都建议JavaFX和Swing一样好,但我没有看到任何有效的论据,除了简单的意见争吵)。它必须能在Windows、Mac和一些流行的Linux发行版上运行。

  • 哪种框架更干净易于维护?

  • 和哪种框架更容易从头开始构建?

我在我的应用程序中使用MVC方法论,如果这有助于答案的话。


26
如果你是从零开始的话,JavaFX 是一个很好的选择。这是因为 JavaFX 成为了 Oracle 的官方 UI 库,取代了 Swing。但这并不意味着 Swing 被淘汰了,只是在每个版本发布时,JavaFX 会得到更多的关注。话虽如此,在 Stack Overflow 和 Google 等平台上,已经有数以百万计的关于这个话题的问题了。 - Nico
3
我提到了Google。已经有很多关于JavaFX 2和Swing的比较了。 - Nico
1
这里有一个JavaFX的简要概述,但是SWT、Swing或JavaFX都可以用来制作桌面应用程序。 - jewelsea
没有人提到过,但是JavaFX在Oracle认为的某些被称为“服务器”的架构上(例如Solaris)无法编译或运行,因为缺少“jfxrt.jar”支持。 - Malcolm Boekhoff
JavaFX Designer太慢了,实在是太慢了。我无法在我的设计上工作,只能强制自己手写设计,因为每当我在设计师中添加按钮时,Netbeans就会冻结。Swing表现不错,从未遇到过问题。 - Fortune
显示剩余3条评论
6个回答

165

哪个更加清洁易于维护?

所有条件相等的情况下,可能是JavaFX - API在组件之间更一致。然而,这更多地取决于代码编写的方式,而不是使用何种库来编写它。

从头开始构建哪个会更快?

高度取决于你要构建什么。Swing有更多的组件可用(第三方以及内置),并且并非所有组件都已经转移到新的JavaFX平台上,因此如果需要某些自定义内容,则可能需要重新发明轮子。另一方面,如果你想做过渡/动画/视频等内容,则在FX中处理比Swing容易得多。

还有一件事需要记住的是外观。如果你绝对需要默认的系统外观,则JavaFX(目前)无法提供此功能。这对我来说不是太必要(我更喜欢默认的FX外观),但我知道有些政策规定必须限制为系统样式。

个人认为,JavaFX是“即将到来”的UI库,虽然还不是完美的(但已经足够使用),而Swing则是边缘的传统UI库,具有完整的功能和支持,但在未来几年可能不会得到太多支持(因此FX在某个时候可能会超越它)。


4
我相信这些观点同样适用于.NET世界中的桌面GUI领域,其中Windows Presentation Foundation是现代化的方法,旨在取代旧的Windows Forms,因此从理论上讲,在所有方面都更好,但它还不支持本机常见控件/外壳外观,例如简单的文件对话框/目录浏览器/树形视图控件(尚未支持?但已经过了多年)。 - bitoolean

91
据Oracle称,JavaFX是其基于Java的丰富客户端策略的下一步。因此,我建议您采用以下方法:
  • 相比Swing,JavaFX引入了几个改进,例如可以使用FXML标记UI、使用CSS主题等。它有很大潜力编写模块化、清晰明了且易于维护的代码。
  • 这完全取决于您的技能和所使用的工具。
    • 对于Swing,各种IDE都提供了快速开发工具。我个人认为最好的是NetBeans中的GUI builder。
    • JavaFX也得到了各种IDE的支持,尽管目前不如Swing的支持成熟。但是,它对FXML和CSS的支持使得在JavaFX上开发GUI变得直观。
  • MVC模式支持
  • JavaFX非常友好地支持MVC模式,您可以清晰地将工作分为:显示(FXML,CSS),模型(Java,领域对象)和逻辑(Java)。
  • 在我看来,Swing中的MVC支持并不是很吸引人。您将在各种组件之间看到的流程缺乏一致性。

有关JavaFX的更多信息,请查看Oracle的这些FAQ帖子。


19

目前还没有人提到,但JavaFX无法在被Oracle称为“服务器”的某些体系结构上编译或运行(例如Solaris),因为缺少“jfxrt.jar”支持。在进一步的通知之前,请使用SWT。


17
@Quillion 特别要求构建一个桌面应用程序,“必须在 Windows、Mac 和一些流行的 Linux 发行版上运行。” 所以我猜他不关心 Solaris。 - Tim Büthe

6
我认为这个问题没有一个正确的答案,但我的建议是除非你遇到了需要进行大规模改进的严重限制,否则应该坚持使用SWT。
此外,SWT实际上比Swing更新并且维护得更加积极。(它最初是作为使用本地组件替代Swing的开发项目)。

19
SWT从未旨在取代Swing。为什么这么说呢?因为Swing是随Java一起来自SUN的,而SWT只能在4或5个平台上运行,最初来自IBM,并在Eclipse Foundation中得到进一步开发。如果非要说的话,可以说:SWT旨在替换AWT。 - Angel O'Sphere

1
在集成显卡的旧笔记本电脑上,Swing应用程序启动和工作速度比JavaFX应用程序快得多。至于开发方面,我建议转向Scala-与Java相比,可比较的Scala Swing应用程序包含的代码量要少2..3倍。 至于Swing与SWT:Netbeans GUI比Eclipse快得多...

Scala Swing 很值得一提。 - draw

0
我建议你寻找一些(第三方?)组件来实现你想要的功能。我曾经为日程视图创建了自定义Swing组件,可以预订多个资源,以及一个类似Excel的网格,可以很好地支持键盘导航等功能。我花费了很长时间才使它们能够良好地工作,因为我需要深入了解Swing的许多复杂性,每当我遇到问题时。鼠标和焦点行为以及许多其他事情可能非常难以正确处理,特别是对于一个非专业的Swing用户。我希望JavaFX更加面向未来,开箱即用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接