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