面向桌面应用程序的Swing与JavaFx [关闭]


195

我有一个非常大的程序,当前正在使用SWT。该程序可以在Windows,Mac和Linux上运行,它是一个包含许多元素的大型桌面应用程序。现在SWT有点老了,我想切换到Swing或JavaFX。我想听听您对三件事的想法。

我主要关心的是桌面GUI应用程序会更好吗?(我在网上看过,很多人认为JavaFX与Swing一样好,但是除了简单的见解大战之外,我没有看到很多有效的论点)。它必须在Windows,Mac和一些流行的Linux发行版上都可以工作。

  • 什么会更清洁,更容易维护?

  • 从头开始构建的速度更快?

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


23
JavaFX很好,是您从头开始。同样是因为JavaFX正式将Swing替换为Oracle的Java UI库。这并不意味着Swing已被淘汰。这只是意味着JavaFX将在每个发行版中得到更多关注。话虽如此,关于SO和Google上其他地方的这个主题已经有100万个问题。
nico_c 2013年

3
stackoverflow.com/questions/10587713/…我还提到了Google。已经有很多了。
nico_c 2013年

好了,那么建议真的似乎是外汇,我将保持开放,但我会接受一个答案。感谢您的链接。
Quillion

1
尽管可以使用SWT,Swing或JavaFX中的任何一种来生成桌面应用程序,但是这里都是JavaFX快速摘要
jewelsea

没有人提及它,但是由于缺少对“ jfxrt.jar”的支持,JavaFX不能在Oracle(例如Solaris)视为“服务器”的某些体系结构上编译或运行。
Malcolm Boekhoff 2014年

Answers:


154

什么会更清洁,更容易维护?

在所有条件相同的情况下,可能是JavaFX,API在各个组件之间更加一致。但是,这更多地取决于代码的编写方式,而不是取决于使用什么库编写代码

从头开始构建的速度更快?

高度取决于您要构建的内容。Swing拥有更多的组件(第三方和内置组件),但并不是所有组件都已进入更新的JavaFX平台,因此,如果您需要一些组件,可能需要重新设计轮子。有点习惯。另一方面,如果您要进行转场/动画/视频工作,则在FX中这要容易几个数量级。

要记住的另一件事是(也许)外观。如果您绝对必须具有默认的系统外观,那么JavaFX(目前)不能提供此功能。对我来说并不是必须的(我还是更喜欢默认的FX外观),但是我知道某些策略要求限制系统样式。

就个人而言,我看到的JavaFX为“行动和未来”,这不是UI库相当到那一步(但超过可用),和Swing为的全功能和支持的时刻边界遗留UI库,但可能不会在未来的几年中会发生很多事情(因此,FX可能会在某个时候超过它。)


1
我认为这些观点都适用于.NET世界以及桌面GUI世界,在Windows GUI中,Windows Presentation Foundation是旨在替代旧Windows Forms的现代方法,因此,从理论上讲,它在所有方面都比较好,但不是(但是?)。但已经有好几年了)支持您所期望的本机通用控件/ shell外观,例如简单的文件对话框/目录浏览器/树视图控件。
bitoolean

84

如Oracle所述,JavaFX是其基于Java的富客户端策略的下一步。因此,这是我建议您的情况:

什么会更容易维护

  • JavaFX对Swing进行了一些改进,例如可以使用FXML标记UI以及使用CSS进行主题化。编写模块化,干净且可维护的代码具有巨大的潜力。

从头开始构建会更快

  • 这在很大程度上取决于您的技能和使用的工具。
    • 为了摆动,各种IDE提供了用于快速开发的工具。我个人最好的发现是NetBeans中的GUI构建器。
    • JavaFX也获得了各种IDE的支持,尽管不如Swing目前所提供的支持成熟。但是,它对FXML和CSS中的标记的支持使JavaFX上的GUI开发变得直观。

MVC模式支持

  • JavaFX对MVC模式非常友好,您可以将工作清晰地分离为:表示形式(FXML,CSS),模型(Java,域对象)和逻辑(Java)。
  • 恕我直言,Swing对MVC的支持不是很吸引人。您在各个组件之间看到的流程缺乏一致性。

有关更多信息,请在此处查看Oracle关于JavaFX的这些常见问题解答帖子。


14

没有人提及它,但是由于缺少对“ jfxrt.jar”的支持,JavaFX不能在Oracle(例如Solaris)视为“服务器”的某些体系结构上编译或运行。坚持使用SWT,直到另行通知。


13
@Quillion特意要求构建一个桌面应用程序,该程序“必须能够在Windows,Mac和一些流行的linux风格上工作”。。所以我想他不在乎Solaris。
TimBüthe2014年

5

我认为这个问题没有一个正确的答案,但是我的建议是坚持使用SWT,除非您遇到严重的限制而需要进行大规模的大修。

而且,SWT实际上比Swing更新,更活跃。(它最初是使用本机组件替代Swing 开发的)。


16
SWT从未打算取代Swing。为何如此?Swing与SUN的Java一起提供,而SWT仅在4或5个平台上运行,最初来自IBM,并在Eclispe Foundation中进行了进一步开发。如果您可以说:SWT旨在取代AWT。
Angel O'Sphere 2013年

0

我会四处寻找可以满足您需求的一些(第三方?)组件。我必须为议程视图创建自定义的Swing组件,以便在其中可以预订多个资源,以及一个类似于Excel的网格,该网格可以很好地与键盘导航等配合使用。我花了很长时间让他们很好地工作,因为每当遇到问题时,我都需要深入研究Swing的许多复杂问题。鼠标和焦点行为以及许多其他事情可能很难正确解决,尤其是对于随意的Swing用户。我希望JavaFX更面向未来,并且开箱即用。


0

在带有集成视频的较早笔记本电脑上,Swing应用程序会启动,并且比JavaFX应用程序运行得快得多。至于开发,我建议切换到Scala-可比的Scala Swing应用程序包含的代码比Java少2..3倍。至于Swing与SWT:Netbeans GUI的速度比Eclipse快得多。


值得一提的是Scala Swing
抽奖
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.