我有一个非常大的程序,目前正在使用SWT。 该程序可以在Windows,Mac和Linux上运行,它是一个包含许多元素的大型桌面应用程序。
现在SWT有点老了我想切换到Swing或JavaFX。 我想听听你对三件事的看法。
我主要担心的是桌面GUI应用程序会有什么好处? (我在网上看了很多人都认为JavaFX和Swing一样好,但除了简单的意见火焰战争之外我没有看到很多有效的论据)。 它必须适用于Windows,Mac和一些流行的Linux发行版。
什么更干净,更容易维护?
从头开始构建什么会更快?
我在我的应用程序中使用MVC方法,如果有任何帮助的话。
JavaFX很好,你从头开始。此外,因为JavaFX正式将Swing替换为Java的Oracles UI库。这并不意味着Swing被废除了。这只是意味着JavaFX将在每个版本中得到更多的关注。话虽如此,关于这个主题的问题已经有一百五十个问题了。
stackoverflow.com/questions/10587713/我还提到了谷歌。已经很多了。
好的建议真的好像是fx然后,我会保持这个开放,但我会接受一个答案。谢谢你的链接。
以下是JavaFX的快速摘要,但SWT,Swing或JavaFX中的任何一个都可用于生成桌面应用程序。
没人提到它,但是由于缺少"jfxrt.jar"支持,JavaFX不能在Oracle(例如Solaris)认为是"服务器"的某些体系结构上编译或运行。
可能与Java GUI框架重复。选择什么? Swing,SWT,AWT,SwingX,JGoodies,JavaFX,Apache Pivot?
JavaFX Designer很慢,太慢。我无法处理我的设计,我被迫编写设计,因为每当我向设计师添加按钮时Netbeans都会冻结。 Swing确实很好,从来没有遇到过这个问题。
在使用JavaFX几个月后,当我回到学校的Swing项目时,它们似乎真的过时了。属性和绑定比Swing中的听众更直观。 MDI支持的缺乏对我来说至少不是问题,我更喜欢标签。使用CSS设置样式比设置和覆盖方法更容易管理。
What will be cleaner and easier to maintain?
在所有条件相同的情况下,可能是JavaFX - API在各个组件之间更加一致。但是,这更多地取决于代码的编写方式,而不是用于编写代码的库。
And what will be faster to build from scratch?
高度依赖于你正在建设的东西。 Swing有更多的组件(第三方以及内置)并且并非所有组件都已经进入新的JavaFX平台,所以如果你需要一些东西,可能会有一定数量的重新发明轮子有点习惯。另一方面,如果你想做转场/动画/视频的东西,那么这在FX中更容易。
要记住的另一件事是(也许)外观和感觉。如果您绝对必须拥有默认的系统外观,那么JavaFX(目前)无法提供此功能。对我来说不是必须的(我更喜欢默认的FX外观),但我知道有些政策要求限制系统风格。
就我个人而言,我认为JavaFX是一个"即将到来"的UI库,它还没有完全存在(但超过可用),而Swing作为边缘传统的UI库,目前功能齐全并且支持,但可能不会未来几年这么多(因此外汇有可能在某些时候超过它。)
我相信这些要点都适用于.NET世界以及桌面GUI世界,其中Windows Presentation Foundation是旨在取代旧Windows窗体的现代方法,因此它在理论上在所有方面都更好,除了它不会(但是它? 多年来)支持原生的通用控件/ shell看起来你期望如一个简单的文件对话框/目录浏览器/树视图控件。
正如Oracle所述,JavaFX是其基于Java的富客户端战略的下一步。
因此,这是我建议你的情况:
What would be easier and cleaner to maintain
JavaFX引入了一些关于Swing的改进,例如,使用FXML标记UI的可能性,以及使用CSS的主题。它具有编写模块化,清晰和可维护代码的巨大潜力。
What would be faster to build from scratch
这在很大程度上取决于您的技能和您使用的工具。
对于摆动,各种IDE提供了快速开发的工具。我个人发现的最好的是NetBeans中的GUI构建器。
JavaFX也得到了各种IDE的支持,虽然不像Swing目前支持的那样成熟。但是,它对FXML和CSS中的标记的支持使得JavaFX上的GUI开发变得直观。
MVC Pattern Support
JavaFX对MVC模式非常友好,您可以将您的工作清晰地分离为:表示(FXML,CSS),模型(Java,域对象)和逻辑(Java)。
恕我直言,Swing的MVC支持不是很吸引人。您将在各种组件中看到的流程缺乏一致性。
有关详细信息,请在此处查看Oracle关于JavaFX的这些常见问题解答。
JavaFX常见问题解答
没人提到它,但是由于缺少"jfxrt.jar"支持,JavaFX不能在Oracle(例如Solaris)认为是"服务器"的某些体系结构上编译或运行。坚持SWT,直到另行通知。
@Quillion特别要求建立一个桌面应用程序,"必须在windows,mac和一些流行的Linux风格上工作。" 所以我猜他并不关心Solaris。
我不认为对这个问题有任何正确的答案,但我的建议是坚持使用SWT,除非你遇到需要如此大规模改革的严重限制。
此外,SWT实际上比Swing更新,更积极地维护。 (它最初是作为使用本机组件的Swing的替代品而开发的)。
SWT从未打算取代Swing。 怎么会这样? Swing来自SUN的Java,而SWT仅在4或5个平台上运行,最初来自IBM,并在Eclispe Foundation中进一步开发。 如果你可以说:SWT旨在取代AWT。
在具有集成视频的旧笔记本上,Swing应用程序的启动和工作速度比JavaFX应用程序快得多。至于开发,我建议切换到Scala - 类似的Scala Swing应用程序包含的代码比Java少2..3倍。
至于Swing vs SWT:Netbeans GUI比Eclipse快得多......
Scala Swing很值得一提
我会四处寻找一些能够满足您需求的(第三方?)组件。我必须为议程视图创建自定义Swing组件,您可以在其中预订多个资源,以及类似Excel的网格,可以很好地使用键盘导航等。我有一段非常糟糕的时间让他们工作得很好,因为每当我遇到问题时,我都需要深入研究Swing的许多错综复杂的东西。鼠标和焦点行为以及许多其他事情可能很难做到,特别是对于休闲的Swing用户。我希望JavaFX能够更加面向未来并且开箱即用。