Java开发GUI的未来?

时间:2010-07-17 08:26:09

标签: java user-interface api swing swt

考虑到

  • Sun / Oracle决定在他们“发明”JavaFX
  • 之后不再开发Swing
  • JavaFX并不真正起作用some consider it a failure already
  • SWT不是真正与平台无关的特性,处理GUI元素的手动任务以及捆绑特定于平台的库的必要性

还有另一种出路吗?

如果我想在JVM上进行GUI开发

  • 有一个很好的API(Swing和SWT也不错,但它们也不是很好。)
  • 哪种“感觉”响应(尽管声称这已经解决了,但今天Swing和SWT仍然存在问题。)
  • 在几年内不会过时 我应该做出什么决定?

是否有可用的第三种选择,或者将来可能会有一种选择?

选项

  • 快速响应(Not Swing的意识形态“如果它不快,那是开发人员的错”)
  • 具有原生外观和感觉
  • 使用在所有平台上运行的单个库

这是现实吗?

谢谢!

======

澄清:如果我必须在JVM上启动一个新的软件项目,有几个现有选项,如使用SWT或Swing,使用Swing与第三方库,如SwingX,JIDE,JGoodies,Flamingo或使用应用程序框架像Netbeans Platform或Eclipse RCP。是否有支持/建议的方法可以减轻通常与Java GUI开发相关的痛苦?

2 个答案:

答案 0 :(得分:8)

我认为答案是更喜欢摇摆

  • 自1.4以来在awt上有很大的进步(sun do do that因为java fx需要awt,幸运的是)
  • 自1.5在线程管理方面取得了很大进展(SwingWorker和concurrents things)
  • swing非常好,反应灵敏(开发者问题有什么问题?),原生l& f等等
  • 有很好的库,比如swingx,trident等,以及像netbeans这样的平台。

当然这是一项成熟的技术(有点旧),但我什么都不知道。它将是GUI开发的cobol: - )

答案 1 :(得分:7)

您不会找到这个问题的客观答案,只能找到个人偏好和选项。

SWT

我个人的偏好是SWT。我开始使用它,当Swing不好选择时。 SWT“只是”本机窗口API之上的一层,因此使用SWT编写的应用程序就像本机编写的应用程序一样。那些也可以搞砸了。对于糟糕的开发人员来说,没有API是安全的。性能和我的经验一样快。如果不是,那么还有另一种方法可以实现它。

SWT的API非常低,这使得实现基本的东西出乎意料地乏味,但幸运的是,大多数典型的用例都可以通过JFace解决,从而改善了这种情况。当您使用API​​一段时间后,您将累积自己的util类。您可以快速实现SWT工具。

由于SWT仅为您提供基础知识,因此您需要MigLayoutNebula小部件才能生存。您可能想要Glazed Lists

Qt Jambi

实际上我希望除了SWT和Swing之外还包括另一个选项:Qt Jambi。但诺基亚放弃了这一点,现在它“由一个开源社区维护”。所以我不知道“几年内不会过时”。

尽管如此,我对此持续discussion感到很兴奋。有些人使用Qt Jambi编写了一个SWT实现作为“本机”API。他们正试图弄清楚如何贡献它。让Qt作为一个选项可能有一天为SWT启用你的“在所有平台上运行的单个库”,尽管我不会很快指望它。

但对我来说,你对“单一图书馆”的要求并不是一个大问题。使用maven作为构建,添加几行配置,你很快就会忘记这一点。

摇摆

我无法将SWT与Swing进行比较,因为我对Swing的体验有限。作为一个用户,我不喜欢大多数Swing应用程序,但我确实看到了一些美丽的应用程序。

如今,Swing应用程序的原生外观非常好,但你不会欺骗高级用户。在新的和做得好的Swing应用程序中,性能似乎也非常好,但同样,这只是作为用户的限制视图。

显然,Swing的第三方扩展比SWT更多 - 只需进行Google搜索。 (但话说回来,如果你忍受学习Eclipse RCP的痛苦,你也会得到一个庞大而有趣的基础设施。但这并不是在谈论小部件,而是像EMFRAP这样的东西。我是没有Eclipse RCP人 - 我从来没有足够的耐心......)

如果你喜欢那些东西,那么Swing的一个非常大的优势就是Netbeans的GUI构建者Matisse。顺便说一句,Qt还有一个做得很好的GUI构建器。

摘要

如果您计划长期,我在Java中看不到比SWT或Swing更多的选项用于GUI开发。如果你花足够的时间,两者都足以满足大多数需求。但它们并不完美。你总是羡慕那些使用其他语言的人为他们的小部件,实现速度,工具,......如果你不受Java的约束,你甚至可能更喜欢Flash或Qt。