您是否开始将Swing项目迁移到JavaFX [关闭]


13

我有一个4年的项目,它是用Swing + SwingX编写的。目前,它还活着并且还在踢。

但是,随着更多与GUI相关的功能请求(例如,可排序的树表)的出现,我开始感到难以完成请求。尤其是因为SwingX项目周围没有任何活跃的开发,因此尤其如此。

另外,我几乎找不到任何不错的,但是积极维护/开发/发展的GUI Java框架。

我想知道,Swing开发人员是否有同样的感觉?您是否已开始将Swing项目迁移到更加活跃的已开发GUI框架(如JavaFX)?



7
如果您没有那个Swing,这并不重要。
— 罗伯特·哈维

摇摆是跨平台的。javaFX2没有..案例关闭。

@blanc在Windows,Linux和OSX上可用。YanChenhCHEOK,TreeTable计划用于JavaFX 8(今年晚些时候(可能是9月)与Java 8一起发布)。
— assylias 2013年

Answers:


9

我个人将转向JavaFX(2.1+,而不是具有令人讨厌的脚本语言的旧版本1.x)。新的JavaFX并不是100%完美的,但是使用它已经比Swing更令人愉悦了,我认为它的发展前景是合理的(特别是考虑到嵌入式Webkit引擎)。


9

我经常问自己同样的事情,但是我不认为我会将现有项目迁移到JavaFX。至少目前还没有,而且不适用于中大型项目。但是,我将考虑将JavaFX用于新项目,并在将来再次考虑进行迁移,并根据JavaFX的进度重新评估问题。

目前,我担心的是:

  • 不成熟

    是的,我们即将推出3.0版,但时间不长,并且仍在进行重大更改。因此,对于大型且规避风险的公司软件,这是一个相对痛苦的地方。

  • 性能

    我还没有看到足够的关于性能差异的硬数据。

  • 小部件和组件

    我还没有在新组件中获得足够的收益。我猜这可能与不成熟有关。与Swing相比,我还不知道它们的扩展和组合程度如何。

总体而言,我想关于优势的硬数据是我无法被JavaFX完全说服的东西。

另一方面,Swing已经过验证和测试。是的,该API很笨拙,并且在IDE中对像JTextPane这样的Swing对象调用自动完成功能会使它哭泣,但如果您足够了解,则可以使用Swing构建很棒的UI,表现良好(我从来没有买过Swing表现糟糕的谬论,请参阅Sun博客上Romain Guy以前的博客文章),并允许您做一些漂亮的事情。

因此,在切换任何内容之前,我建议您首先尝试一个小的原型,然后尝试移植一些应用程序的对话框并查看其运行方式。


5

我现在已经做了很多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-jfx互操作性,这很容易出错。我在我的应用程序中尝试过它,它在netbeans中可以工作,但是如果我尝试直接运行.jar,则会遇到与内存/线程相关的奇怪错误。在我看来,请重新开始。
— 点击Upvote 2012年

4

Swing正在或已经成为一种遗留技术。但是,它的作用很好,并且在任何可预见的将来都不会消失,因此,我认为没有理由放弃它,尤其是如果有人已经对其进行了投资。JIDE Software制造了良好的(商业)Swing组件,以替换标准Swing中缺少的组件。例如,可排序的树表开箱即用在其网格中。


3

尽管新的JavaFX版本看起来非常令人印象深刻,但我怀疑是否值得进行完整的迁移,除非您愿意花费大量时间/精力/金钱来对GUI进行彻底的检查。

秋千可能有其独特之处,并显示出它的年龄,但它也有一些优点:

  • 强大的跨平台功能,目前比JavaFX好得多
  • 它已经成熟并经过验证,比JavaFX更为重要
  • 它拥有庞大的用户社区/图书馆生态系统
  • 您可能已经具备很多Swing技能,或者可以轻松雇用他们

最终,如果它没有损坏,为什么要修复它?

当然,对于一个新项目,我将非常认真地研究JavaFX,Android和/或基于Web的GUI(也许使用Vaadin之类的东西)。


JavaFX跨平台功能是否存在任何问题?
— 点击Upvote 2012年

上次我检查Windows,Mac和Linux是否支持JavaFX。如果您还针对其他平台,则值得检查其状态....如果您正在寻找广泛的跨平台功能,那么Swing仍然是一个安全的选择(截至2012年中)。
— mikera 2012年

还有哪些其他感兴趣的平台?
— 点击Upvote 2012年

1

我和OP处于同一位置-拥有旧的swing应用程序,但需要实现它本身不支持的新习惯用法和接口。由于各种原因(提高了模块性,更好的MVC和事件分发结构等),已将这些应用程序中最大的应用程序进行了几次重构,因此我并不完全反对重写UI代码。所以我在这个问题上考虑了很长时间。

但是,如果不花更多的时间和精力在本质上是一项遗留技术上,则Swing无法解决某些问题。例如,除了简单的鼠标事件外,Swing本身也不支持新的触摸屏设备。提供基于Swing的浏览器组件同样麻烦或昂贵,就我而言,javafx-in-swing方法不是一种选择,因为它以非平凡的方式使UI事件处理变得复杂。

我认为它已经过时并且忠于它的时代,如果您的平台与您的代码库一样不变-坚持下去。但是对于要进入新的更现代用例的应用程序而言,JavaFX 2+可能会成为我的案例中的前进方式。

附带说明一下:我本来希望在jfx中消失的Swing中的一个缺点是-但不是-是UI事件分发的单线程到所有规则的所有方法。任何不平凡的用户界面都需要多线程来保持UI的清晰和响应,并且完全由应用程序开发人员来解决相同的陷阱,这很容易导致API IMHO的不足。


0

我在大型的基于桌面的应用程序中使用RCP有丰富的经验。它基本上是从Eclipse GUI层的抽象开始的,从那以后已经走了很长一段路。RCP取代了基于AWT的Swing,它基于JFace构建,而JFa​​ce则基于SWT。它允许您开发应用程序并使用Eclipse本身使用的GUI概念(视图,编辑器,透视图,向导等)。它具有很好的可扩展性,并且像Eclipse本身一样,一直在不断改进。

但是,我从未将现有项目从Swing迁移到RCP。我想这会花相当长的时间来围绕不同的范式,如果您还没有很好地分离模型和视图层,那肯定会很困难。但是,由于您询问了诸如可排序树表之类的问题,RCP擅长于此。

如果您想进一步研究,您可能想尝试一下Lars Vogel的教程,或者看看一些使用RCP的开源项目或商业项目的示例。


-2

(例如,一个可排序的树表),我开始感到难以完成请求。这是真的,尤其是在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


MsAccess是GUI框架吗?
— Cheok Yan Cheng 2012年

呵呵是不是???什么问题,平台差异或问题???第一个Java GUI框架非常相似
— mKorbel
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.