Swing vs JavaFx用于桌面应用程序

时间:2013-05-22 14:49:22

标签: java swing user-interface javafx swingx

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

我主要关心的是桌面GUI应用程序会有什么好处? (我在网上看了很多人都认为JavaFX和Swing一样好,但除了简单的意见火焰战争之外我没有看到很多有效的论据)。它必须适用于Windows,Mac和一些流行的Linux发行版。

  • 什么更干净,更容易维护?

  • 从头开始构建什么会更快?

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

6 个答案:

答案 0 :(得分:147)

  

什么更干净,更容易维护?

所有条件都相同,可能是JavaFX - API在各个组件之间更加一致。但是,这更多地取决于如何编写代码而不是使用哪个库来编写代码

  

从头开始构建什么会更快?

高度依赖于你正在建设的东西。 Swing有更多的组件(第三方以及内置)并且并非所有组件都已经进入新的JavaFX平台,所以如果你需要一些东西,可能会有一定数量的重新发明轮子有点习惯。另一方面,如果你想做转换/动画/视频内容,那么这在FX中就更容易了。

要记住的另一件事是(也许)外观和感觉。如果您绝对必须拥有默认的系统外观,那么JavaFX(目前)无法提供此功能。对我来说不是必须的(我更喜欢默认的FX外观),但我知道有些政策要求限制系统风格。

就个人而言,我认为JavaFX是“即将到来”的UI库,它还不是相当(但不仅仅是可用的),而Swing是一个功能全面且支持的边缘传统UI库目前,但未来几年可能不会那么多(因此外汇有可能在某些时候超过它。)

答案 1 :(得分:80)

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

  

维护什么更容易,更清洁

  • JavaFX引入了一些关于Swing的改进,例如,使用FXML标记UI的可能性,以及使用CSS的主题。它具有编写模块化,清洁和放大器的巨大潜力。可维护的代码。
  

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

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

MVC模式支持

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

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

答案 2 :(得分:14)

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

答案 3 :(得分:5)

我认为这个问题没有任何一个正确的答案,但我的建议是坚持使用SWT,除非你遇到需要如此大规模改革的严重限制。

此外,SWT实际上比Swing更新,更积极地维护。 (使用本机组件替换Swing是originally developed

答案 4 :(得分:0)

我会四处寻找能够满足您需求的(第三方?)组件。我必须为议程视图创建自定义Swing组件,您可以在其中预订多个资源,以及类似Excel的网格,可以很好地使用键盘导航等。我有一段非常糟糕的时间让他们工作得很好,因为每当我遇到问题时,我都需要深入研究Swing的许多错综复杂的东西。鼠标和焦点行为以及许多其他事情可能很难做到,特别是对于休闲的Swing用户。我希望JavaFX能够更加面向未来并且开箱即用。

答案 5 :(得分:0)

在具有集成视频的旧款笔记本上,Swing应用程序的启动速度比JavaFX应用程序快得多。至于开发,我建议切换到Scala - 类似的Scala Swing应用程序包含的代码比Java少2..3倍。 至于Swing vs SWT:Netbeans GUI比Eclipse快得多......