Java中GUI开发的未来?[已关闭]

2022-09-04 21:00:41

考虑到

  • Sun/Oracle决定在他们“发明”JavaFX后不再开发Swing。
  • JavaFX并不真正工作,有些人认为它已经失败了。
  • SWT 并非真正独立于平台,手动任务是配置 GUI 元素,并且需要捆绑特定于平台的库

还有别的出路吗?

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

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

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

一个选项

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

这现实吗?

谢谢!

=========

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


答案 1

答案是更喜欢秋千,我想。

  • 自1.4以来,在awt上有很大的进展(幸运的是,sun这样做是因为java fx需要awt)
  • 自1.5以来线程管理的重大进展(SwingWorker和并发的东西)
  • 摆动非常好,响应迅速(开发程序故障有什么问题?),原生l&f,等等
  • 有优秀的库,如swingx,trident等,以及平台,如netbeans。

当然,这是一项成熟的技术(有点旧),但我对别的一无所知。这将是GUI开发的cobol:-)


答案 2

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

断续器

我个人更喜欢SWT。我开始使用它,当Swing不好成为一种选择时。SWT“只是”本机窗口 API 之上的一层,因此使用 SWT 编写的应用程序感觉就像本机编写的应用程序。这些也可以搞砸。没有一个API是安全的,不会受到糟糕的开发人员的影响。根据我的经验,性能尽可能快。如果不是,则有另一种方法可以实现它,它将在哪里实现。

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

由于SWT只为您提供基础知识,因此您需要MigLayoutNebula小部件才能生存。您可能喜欢釉面列表

Qt 占碑

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

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

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

摆动

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

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

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

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

总结

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


推荐