Java 桌面应用程序: SWT 与 Swing

我现在是一个网页开发者,正在考虑构建我的第一个真正的桌面应用程序。这个想法是构建一个工具,在没有 API 的 Web 应用程序中自动执行一个非常重复的任务。

我知道我想用 Java。我以前用它来处理 web 的东西,非常熟悉它的语法,并且希望应用程序能够尽可能的跨平台。

我不确定是否应该使用 SWT 或 Swing。因为我的主要读者使用的是 Windows,所以我想让它看起来尽可能的本地化。Linux 和 Mac 应该可以工作,但外观在这里并不那么重要。

那么,支持和反对每个 UI 框架、 Swing 或 SWT 的论据是什么呢?

谢谢。

附言: 我是用 Eclipse 在 Windows 上开发的,但我在考虑使用 Netbeans。

137645 次浏览

对于您的需求,似乎底线是使用 Swing,因为它稍微容易入门,而且不像 SWT 那样与本机平台紧密集成。

摇摆通常是一个安全的赌注。

有趣的问题。我不太了解 SWT,所以不会吹嘘它(不像 Swing 和 AWT) ,但这里是对 SWT/Swing/AWT 的比较。

Http://www.developer.com/java/other/article.php/10936_2179061_2/swing-and-swt-a-tale-of-two-java-gui-libraries.htm

这是一个网站,你可以在这里获得关于 SWT (http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm)基本上任何东西的教程

希望您做出正确的决定(如果在编码中有正确的决定) ... : -)

我会选择秋千,因为它是爪哇语的“本土”。

另外,看看 http://swingx.java.net/

优点:

  • Java 库的一部分,不需要 额外的本机库
  • 在所有平台上都是一样的
  • Netbeans 和 Eclipse 的集成图形用户界面编辑器
  • Sun/Oracle 的优秀在线教程
  • 由官方的 java 扩展(如 java OpenGL)支持

缺点:

  • 本土的外观和感觉可能会表现出来 不同于真正的本地人 系统。
  • 重型组件(本地/awt)隐藏摆动组件,这在大多数情况下不是问题,因为使用重型组件相当罕见

支持 SWT:

  • 尽可能使用本机元素,因此总是使用本机行为
  • 由 eclipse 支持的 gui 编辑器 VEP (VEP 也支持 Swing 和 AWT)
  • 网上大量的例子
  • 有一个综合的 wt/swt 桥,允许使用 wt 和摆动组件

缺点 SWT:

  • 需要为每个 支持系统
  • 可能不支持所有系统上的所有行为,因为 使用的资源(提示选项)
  • 管理本机资源,而本机组件通常会与其父级资源一起释放,其他资源(如字体)必须手动释放或注册为自动释放组件的释放侦听器。

需要考虑的一个重要问题是,一些用户和一些经销商(Dell)在他们的64位 Windows 上安装了64位虚拟机,而你不能在32位和64位虚拟机上使用相同的 SWT 库。

这意味着您需要根据用户使用的是32位还是64位 JavaVM 来分发和测试不同的包。例如,可以参见使用 Azureus 的 这个问题,但是也可以使用 Eclipse,到目前为止,前端下载页面上的构建还不能在64位 VM 上运行。

如果您计划构建具有多个特性的完整功能应用程序,我建议直接使用 Eclipse RCP 作为框架。

如果您的应用程序不会变得太大,或者您的需求太独特,以至于不能由普通的业务框架来处理,那么您可以安全地使用 Swing 进行跳转。

最后,我建议你试试这两种技术,找到一种更适合你的。就像 Netbeans VS Eclipse VS IntelliJ 一样,这里没有绝对正确的答案,两种框架都有自己的缺点。

专业挥杆:

  • 更多的专家
  • 更像 Java (几乎没有公共字段,不需要对资源进行处理)

支持 SWT:

  • 更多的操作系统本地化
  • 再快点

我使用 Swing 有几个原因。

  • 它已经存在了很长时间 更多的开发工作应用于 它。因此,它可能是更多的功能 完整并且(可能)有更少的 bug

  • 有很多文档 其他生产指南 性能应用

  • 看起来是的 像 Swing 传播到 所有平台同时 SWT 的变化似乎出现在 先是 Windows,然后是 Linux。

如果您想构建一个功能非常丰富的应用程序,那么可能需要查看 NetBeans RCP(富客户端平台)。虽然有一个学习曲线,但是通过一些练习,您可以快速地组装出漂亮的应用程序。我在 Eclipse 平台方面没有足够的经验来做出有效的判断。

如果您不想使用整个 RCP,NetBeans 还有许多有用的组件可以提取并独立使用。

另一个建议是,研究不同的布局管理器。当我学习的时候,他们使我困惑了很长一段时间。一些最好的甚至不在标准库中。在我看来,MigLayout(用于 Swing 和 SWT)和 JGoodies Forms 工具是最好的两个。

职业挥杆:

  • 摇摆 IMHO 的最大优点是您不需要随应用程序附带库(这样可以避免大量 MB (!)).
  • 本土的外观和感觉是更好的摇摆比在早年
  • 性能与 SWT 相当(挥杆不慢!)
  • NetBeans 提供了一个舒适的组件构建器 Matisse。
  • 在 JavaFX 中集成 Swing 组件更容易。

但在底线,我不会建议使用’纯’挥杆或 swt; -) 秋千/swt out. 看这里有几种应用程序框架。 最大的玩家是 netbeans (秋千)和 eclipse (swt)。另一个不错的框架可以是 griffon,一组不错的“组件”可以是 pivot (秋千)。Griffon 非常有趣,因为它集成了许多库和 不仅仅是荡秋千; 还有 pivot、 swt 等

SWT 的创立是为了应对世纪之交 Swing 的迟钝。既然性能上的差异变得可以忽略不计,我认为 Swing 对于您的标准应用程序来说是一个更好的选择。SWT/Eclipse 有一个很好的框架,可以帮助编写大量的代码。

需要考虑的一件事是: 屏幕阅读器

由于某些原因,一些 Swing 组件在使用屏幕阅读器(以及适用于 Windows 的 JavaAccessBridge)时不能很好地工作。要知道,不同的屏幕阅读器会导致不同的行为。根据我的经验,SWT-Tree 比 Swing-Tree 与屏幕阅读器的组合要好得多。因此,我们的应用程序最终使用了 SWT 和 Swing 组件。

对于分发和加载正确的 SWT 库,您可能会发现这个链接很有用: Http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191