你不会找到这个问题的客观答案,只会找到个人偏好和选择。
断续器
我个人更喜欢SWT。我开始使用它,当Swing不好成为一种选择时。SWT“只是”本机窗口 API 之上的一层,因此使用 SWT 编写的应用程序感觉就像本机编写的应用程序。这些也可以搞砸。没有一个API是安全的,不会受到糟糕的开发人员的影响。根据我的经验,性能尽可能快。如果不是,则有另一种方法可以实现它,它将在哪里实现。
SWT的API非常低级,这使得实现基本的东西出乎意料地乏味,但幸运的是,大多数典型的用例都可以用JFace解决,这改善了这种情况。当你使用API一段时间时,你会积累自己的util类。您可以非常快速地实现SWT工具。
由于SWT只为您提供基础知识,因此您需要MigLayout和Nebula小部件才能生存。您可能喜欢釉面列表。
Qt 占碑
实际上,除了SWT和Swing之外,我还想为你包括另一个选项:Qt Jambi。但诺基亚放弃了这一点,现在它“由一个开源社区维护”。所以我不知道“几年内不会过时”。
尽管如此,我对这种正在进行的讨论感到兴奋。有些人使用Qt Jambi作为“本机”API编写了SWT实现。他们正试图弄清楚如何贡献它。将Qt作为一个选项可能会在某一天为SWT启用“在所有平台上运行的单个库”,尽管我不会很快指望它。
但对我来说,你对“单一图书馆”的要求并不是一个大问题。使用maven进行构建,添加几行配置,您很快就会忘记这一点。
摆动
我无法将SWT与Swing进行比较,因为我使用Swing的经验受到限制。作为用户,我不喜欢大多数Swing应用程序,但我确实看到了一些美丽的应用程序。
如今,Swing应用程序的原生外观和感觉非常好,但你不会欺骗高级用户。此外,在新的和做得好的Swing应用程序中,性能似乎非常好,但同样,这只是从我作为用户的限制视图。
显然,Swing的第三方扩展比SWT更多 - 只需进行Google搜索即可。(但话又说回来,如果你忍受学习Eclipse RCP的痛苦,你也会得到一个巨大而有趣的基础设施。这不是在谈论小部件,而是像EMF或RAP这样的东西。我不是Eclipse RCP的人 - 我从来没有足够的耐心...)
对于 Swing 来说,一个非常大的优势,如果你喜欢这些东西的话,那就是 Matisse,Netbeans 的 GUI 构建者。顺便说一句,Qt也有一个做得很好的GUI构建器。
总结
如果你计划长期,我没有看到比SWT或Swing更多的选项用于Java中的GUI开发。如果你花足够的时间,两者都足以满足大多数需求。但它们并不完美。你总是羡慕人们使用其他语言的小部件,实现速度,工具,...如果你没有绑定到Java,你甚至可能更喜欢Flash或Qt。