我认为,尽管Sun管理不善,Swing仍然是一个很好的框架。你可以用它做很多事情,特别是如果这个“很多”涉及自定义呈现的UI控件。如果您的应用程序需要一个品牌的 LAF,甚至只是一些复杂的自定义控件,Swing 正是您想要的。
在硬币的另一面,我确实非常喜欢SWT。它得到了一个不好的说唱,因为每个人都曾经认为这是IBM接管Java的策略,但它实际上只是另一个与Swing非常互补的UI框架。我不建议使用SWT进行超复杂的图形渲染(特别是:合成)或创建真正重要的自定义控件,但对于其他所有内容,它真的很花哨。API本身受到了很多批评,因为依赖于位掩码和用户管理的事件调度循环,但是一旦你习惯了它们,大多数这些事情都是非常透明的。组件本身比Swing的要简单得多(在可扩展性和类似性方面),这意味着API可以在比例上更简单。我实际上记得如何在SWT中创建和填充表;而我认为如果没有谷歌的帮助,我从来没有在Swing中处理过这个问题。
SWT目前最大的问题是稳定版本依赖于Mac OS X上的Carbon。这意味着SWT应用程序只能在Java 5上运行32位(或在SoyLatte上运行32位)。至于其他平台,SWT在Windows(Vista和XP)上是惊人的,在GTK Linux上几乎同样好。我(最近)在Linux上没有遇到过SWT的任何问题,所以我有点惊讶你会把它作为一个痛点提到。
回到你的问题:这完全取决于你的应用程序需要什么。如果它是一个华丽的自定义样式应用程序,具有大量的自定义控件和复杂的合成,那么Swing是镇上唯一的游戏。但是,如果更简单的 API 对您更重要,或者您的用户需要最终的平台 LAF 保真度,则 SWT 是最佳选择。