我有一个4年的项目,它是用Swing + SwingX编写的。目前,它还活着并且还在踢。
但是,随着更多与GUI相关的功能请求(例如,可排序的树表)的出现,我开始感到难以完成请求。尤其是因为SwingX项目周围没有任何活跃的开发,因此尤其如此。
另外,我几乎找不到任何不错的,但是积极维护/开发/发展的GUI Java框架。
我想知道,Swing开发人员是否有同样的感觉?您是否已开始将Swing项目迁移到更加活跃的已开发GUI框架(如JavaFX)?
我有一个4年的项目,它是用Swing + SwingX编写的。目前,它还活着并且还在踢。
但是,随着更多与GUI相关的功能请求(例如,可排序的树表)的出现,我开始感到难以完成请求。尤其是因为SwingX项目周围没有任何活跃的开发,因此尤其如此。
另外,我几乎找不到任何不错的,但是积极维护/开发/发展的GUI Java框架。
我想知道,Swing开发人员是否有同样的感觉?您是否已开始将Swing项目迁移到更加活跃的已开发GUI框架(如JavaFX)?
Answers:
我个人将转向JavaFX(2.1+,而不是具有令人讨厌的脚本语言的旧版本1.x)。新的JavaFX并不是100%完美的,但是使用它已经比Swing更令人愉悦了,我认为它的发展前景是合理的(特别是考虑到嵌入式Webkit引擎)。
我经常问自己同样的事情,但是我不认为我会将现有项目迁移到JavaFX。至少目前还没有,而且不适用于中大型项目。但是,我将考虑将JavaFX用于新项目,并在将来再次考虑进行迁移,并根据JavaFX的进度重新评估问题。
目前,我担心的是:
不成熟
是的,我们即将推出3.0版,但时间不长,并且仍在进行重大更改。因此,对于大型且规避风险的公司软件,这是一个相对痛苦的地方。
性能
我还没有看到足够的关于性能差异的硬数据。
小部件和组件
我还没有在新组件中获得足够的收益。我猜这可能与不成熟有关。与Swing相比,我还不知道它们的扩展和组合程度如何。
总体而言,我想关于优势的硬数据是我无法被JavaFX完全说服的东西。
另一方面,Swing已经过验证和测试。是的,该API很笨拙,并且在IDE中对像JTextPane这样的Swing对象调用自动完成功能会使它哭泣,但如果您足够了解,则可以使用Swing构建很棒的UI,表现良好(我从来没有买过Swing表现糟糕的谬论,请参阅Sun博客上Romain Guy以前的博客文章),并允许您做一些漂亮的事情。
因此,在切换任何内容之前,我建议您首先尝试一个小的原型,然后尝试移植一些应用程序的对话框并查看其运行方式。
我现在已经做了很多JavaFX,并且我喜欢它而不是Swing。场景图结构与您使用Swing时所用的结构不同,但是它提供了很多改进。该API使用起来很有趣,令人耳目一新。
您可以使用它做更多的事情,包括多媒体,动画,网页浏览。例如,您可以用几行代码(嵌入html5和javascript)来构建Google Maps应用程序。
据说它包含在Java 8运行时中,这意味着将Swing作为默认ui框架的明确替代。
@Migration:您应该首先隔离应用程序中可以转换为JavaFX的部分。Swing-JavaFX 2的互操作性是一件大事,您可以使用javafx.embed.swing.JFXPanel嵌入JavaFX元素。请参阅swing-fx-interoperability。(为完整起见,您也可以嵌入SWT中。)
Swing正在或已经成为一种遗留技术。但是,它的作用很好,并且在任何可预见的将来都不会消失,因此,我认为没有理由放弃它,尤其是如果有人已经对其进行了投资。JIDE Software制造了良好的(商业)Swing组件,以替换标准Swing中缺少的组件。例如,可排序的树表开箱即用在其网格中。
尽管新的JavaFX版本看起来非常令人印象深刻,但我怀疑是否值得进行完整的迁移,除非您愿意花费大量时间/精力/金钱来对GUI进行彻底的检查。
秋千可能有其独特之处,并显示出它的年龄,但它也有一些优点:
最终,如果它没有损坏,为什么要修复它?
当然,对于一个新项目,我将非常认真地研究JavaFX,Android和/或基于Web的GUI(也许使用Vaadin之类的东西)。
我和OP处于同一位置-拥有旧的swing应用程序,但需要实现它本身不支持的新习惯用法和接口。由于各种原因(提高了模块性,更好的MVC和事件分发结构等),已将这些应用程序中最大的应用程序进行了几次重构,因此我并不完全反对重写UI代码。所以我在这个问题上考虑了很长时间。
但是,如果不花更多的时间和精力在本质上是一项遗留技术上,则Swing无法解决某些问题。例如,除了简单的鼠标事件外,Swing本身也不支持新的触摸屏设备。提供基于Swing的浏览器组件同样麻烦或昂贵,就我而言,javafx-in-swing方法不是一种选择,因为它以非平凡的方式使UI事件处理变得复杂。
我认为它已经过时并且忠于它的时代,如果您的平台与您的代码库一样不变-坚持下去。但是对于要进入新的更现代用例的应用程序而言,JavaFX 2+可能会成为我的案例中的前进方式。
附带说明一下:我本来希望在jfx中消失的Swing中的一个缺点是-但不是-是UI事件分发的单线程到所有规则的所有方法。任何不平凡的用户界面都需要多线程来保持UI的清晰和响应,并且完全由应用程序开发人员来解决相同的陷阱,这很容易导致API IMHO的不足。
我在大型的基于桌面的应用程序中使用RCP有丰富的经验。它基本上是从Eclipse GUI层的抽象开始的,从那以后已经走了很长一段路。RCP取代了基于AWT的Swing,它基于JFace构建,而JFace则基于SWT。它允许您开发应用程序并使用Eclipse本身使用的GUI概念(视图,编辑器,透视图,向导等)。它具有很好的可扩展性,并且像Eclipse本身一样,一直在不断改进。
但是,我从未将现有项目从Swing迁移到RCP。我想这会花相当长的时间来围绕不同的范式,如果您还没有很好地分离模型和视图层,那肯定会很困难。但是,由于您询问了诸如可排序树表之类的问题,RCP擅长于此。
(例如,一个可排序的树表),我开始感到难以完成请求。这是真的,尤其是在SwingX项目周围没有积极的开发。
不对,这个项目还活着吗,
曾经有一次,当SwingX失去了Sun的资助(在Oracle收购期间)时,SwingX的人们去了JavaFX。
而且,我几乎找不到任何好的,但仍在积极维护/开发/发展的GUI Java框架。
没有Swing不是关于Framework而是关于外观
框架适用于非技术用户(MsAccess可能是GUI框架的最佳示例)
但是,如果您想构建一个真正的应用程序,那么您也具有有关Swing的丰富知识,并且重写也来自Framework,
有趣的示例Netbeans内置了基于JSR296的Swing框架,但是无法直接更改JFrames Icon,
您是否已开始将Swing项目迁移到更加活跃的已开发GUI框架(如JavaFX)?
没有理由
与迁移到Java7相同,也许何时会出现Java7.15-17
我将JavaFx与Nimbus进行了比较,开发在上半年结束/放弃了
抱歉,我不是开发人员,我只是Java和Swing Fan