Swing与JavaFx的桌面应用程序

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

我主要关心的是桌面GUI应用程序会更好吗? (我在网上看了很多人的build议,JavaFX和Swing一样好,但除了简单的意见之外,我没有看到许多有效的争论)。 它必须在Windows,Mac和一些stream行的Linux发行版上工作。

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

  • 而从零开始构build会更快?

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

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

所有事情都是平等的,可能是JavaFX– API在各个组件中更加一致。 但是,这更多地取决于如何编写代码,而不是使用什么库来编写代码

从零开始构build会更快吗?

高度依赖于你正在build设的东西。 Swing有更多的组件(第三方以及内置的),并不是所有的组件都已经进入了更新的JavaFX平台,所以如果你需要一些东西,可能会有一定的重新发明轮子位定制。 另一方面,如果你想做转场/animation/video的东西,那么在FX中这是数量级的更容易。

还有一点需要记住的是(可能)外观和感觉。 如果你绝对必须有默认的系统外观和感觉,那么JavaFX(目前)不能提供这个。 对我来说不是一件大事(我更喜欢默认的FX外观),但是我知道有些策略会限制系统风格。

就我个人而言,我将JavaFX看作是“即将到来”的UI库,它还不是那么完美(但可用性更高),而Swing作为目前function齐全且支持的边缘遗留UI库,但可能不会在未来几年如此之多(因此外汇交易有可能会在某个时候超过它)。

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

什么会更容易和更干净的维护

  • JavaFX已经在Swing上引入了一些改进,例如,用FXML标记UI的可能性,以及CSS的主题化。 编写模块化,清洁和可维护的代码很有潜力。

从零开始构build会更快

  • 这是高度依赖于你的技能和你使用的工具。
    • 为了摆动,各种IDE提供了快速开发的工具。 我个人发现的最好的是NetBeans中的GUI构build器。
    • JavaFX也支持各种IDE,尽pipe还不如Swing目前支持的成熟。 但是,它支持FXML和CSS中的标记,使JavaFX上的GUI开发更加快捷直观。

MVC模式支持

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

有关更多信息,请参阅Oracle关于JavaFX的这些常见问题解答。

  • JavaFX常见问题

我在非生产娱乐应用程序中第一次使用javafx,那里没有问题。 它没有生产质量恕我直言。

例如:一个需要技巧,在某些情况下,解决方法就像在一个TableView中的列的右alignment可能需要额外的努力。 callback使用callback是有点过头了。

另一方面,HTMLEditor有很好的效果和附加function。 切换应用程序语言更简单(只需重build场景)。 在Java 8中,javafx应该更易于理解(callback),并且已经成熟。

如果你不能等待,那就去摇摆。 它是坚如磐石的。 您可以selectNetBeans平台RCP,但需要学习或商业支持。 将NetBeans平台的一部分移植到javafx也是一个混合版本。

最后但并非最不重要的一点,可以将两者结合起来,在swing应用程序中运行javafx。


附录上面的答案是在2013年5月22日。现在JavaFX已经准备好了。

没有人提到过,但由于缺less“jfxrt.jar”支持,JavaFX不能编译或运行在某些由Oracle(如Solaris)认定为“服务器”的体系结构上。 坚持与SWT,直至另行通知。

我不认为这个问题有任何正确的答案,但我的build议是坚持使用SWT,除非你遇到需要如此大规模检修的严格限制。

此外,SWT实际上比Swing更新更积极。 (它最初是作为使用本地组件的Swing的替代品而开发的 )。

我会四处寻找一些(第三方?)组件来做你想做的事情。 我不得不为一个议程视图创build自定义的Swing组件,您可以在其中预订多个资源,还可以创build一个类似Excel的网格,这个网格可以在键盘导航等方面很好地工作。 我有一个可怕的时间让他们很好地工作,因为我需要钻研许多Swing的许多错综复杂,每当我遇到一个问题。 鼠标和焦点行为以及许多其他事情可能很难得到正确的使用,尤其是对于一个休闲的Swing用户。 我希望JavaFX更加面向未来,顺利开箱即用。

在集成videoSwing应用程序的旧笔记本电脑上,启动速度比JavaFX应用程序快得多。 至于开发,我build议切换到Scala – 可比较的Scala Swing应用程序包含比Javaless2..3倍的代码。 至于Swing vs SWT:Netbeans GUI比Eclipse快得多…