Java桌面应用程序:SWT与Swing

时间:2010-02-21 14:39:40

标签: java swing swt

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

我知道我想使用Java。我之前使用它来获取Web内容,非常了解语法并希望应用程序尽可能简单地交叉平台。

我不确定是否应该使用SWT或Swing。由于我的主要受众使用Windows,我希望尽可能将其视为本机。 Linux和Mac应该可以工作,但外观在这里并不那么重要。

那么支持和反对每个UI框架,Swing或SWT的参数是什么?

感谢。

PS:我使用Eclipse在Windows上开发。但是考虑和Netbeans一起玩。

10 个答案:

答案 0 :(得分:150)

优点摆动:

  • java库的一部分,不需要 其他本地图书馆
  • 在所有平台上以相同的方式工作
  • Netbeans和Eclipse中的集成GUI编辑器
  • Sun / Oracle的良好在线教程
  • 由官方java扩展(如java OpenGL)支持

Cons Swing:

  • 原生外观可能表现得很好 与真正的原生不同 系统。
  • 重型组件(native / awt)隐藏摆动组件,大多数时候都不是问题,因为使用重型组件相当罕见

优点SWT:

  • 尽可能使用原生元素,因此始终使用原生行为
  • 由eclipse支持,gui编辑VEP(VEP也支持Swing和AWT)
  • 大量在线示例
  • 有一个集成的awt / swt桥,允许使用awt和swing组件

缺点SWT:

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

答案 1 :(得分:63)

需要考虑的一件重要事情是,某些用户和某些经销商(Dell)在其64位Windows上安装了64位虚拟机,而您无法在32位和64位虚拟机上使用相同的SWT库。

这意味着您需要根据用户是使用32位还是64位Java VM来分发和测试不同的软件包。例如,请参阅使用Azureus的this problem,但您也可以使用Eclipse,其中截至今天,前端下载页面上的版本不能在64位VM上运行。

答案 2 :(得分:23)

职业摇摆:

  • 摆动恕我直言的最大优点是你不需要随你的应用程序运送库(这避免了十几个MB(!))。
  • 摇摆的原生外观比早年好得多
  • 性能与swt相当(挥杆不慢!)<​​/ li>
  • NetBeans提供Matisse作为舒适的组件构建器。
  • 在JavaFX中集成Swing组件更容易。

但在底线我不建议使用'纯'摇摆或swt ;-) 有几个应用程序框架可用于摆动/ swt输出。 Look here。 最大的玩家是netbeans(swing)和eclipse(swt)。另一个不错的框架可能是griffon,一个很好的'组件'是pivot(swing)。 Griffon非常有趣,因为它集成了很多库和not only swing;还有枢轴,swt等

答案 3 :(得分:13)

我会使用Swing有几个原因。

  • 它已经存在了很长时间 更多的开发工作应用于 它。因此它可能更具特色 完成并且(可能)有更少的错误。

  • 有很多文档和 关于生产的其他指导 高性能应用程序。

  • 看来 喜欢Swing传播的变化 所有平台同时进行 SWT的变化似乎出现了 首先是Windows,然后是Linux。

如果要构建功能丰富的应用程序,可能需要查看NetBeans RCP(富客户端平台)。有一个学习曲线,但你可以通过一些练习快速组合好的应用程序。我没有足够的Eclipse平台经验来做出有效判断。

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

另一个建议是,查看不同的布局管理器。在我学习的时候,他们绊了我很长时间。一些最好的甚至不在标准库中。 MigLayout(适用于Swing和SWT)和JGoodies表单工具是我认为最好的两种工具。

答案 4 :(得分:10)

我会选择swing只是因为它是java的“原生”。

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

答案 5 :(得分:8)

根据您的要求,听起来最重要的是使用Swing,因为它稍微容易入手,而不是像SWT那样与原生平台紧密集成。

挥杆通常是一个安全的选择。

答案 6 :(得分:6)

有趣的问题。我不太了解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

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

答案 7 :(得分:4)

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

如果您的应用程序不会变得太大或者您的要求太过独特而无法通过正常的业务框架处理,那么您可以安全地使用Swing进行跳转。

在一天结束时,我建议你尝试两种技术,找到最适合你的技术。就像Netbeans vs Eclipse vs IntelliJ一样,这里没有绝对正确的答案,两个框架都有各自的缺点。

Pro Swing:

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

Pro SWT:

  • 更多操作系统原生
  • 更快

答案 8 :(得分:4)

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

由于某些原因,使用屏幕阅读器(以及适用于Windows的Java AccessBridge)时,某些Swing组件无法正常工作。知道不同的屏幕阅读器会导致不同的行为。根据我的经验,SWT-Tree与Swing-Tree结合使用屏幕阅读器的效果要好得多。因此,我们的应用程序最终使用了SWT和Swing组件。

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

答案 9 :(得分:3)

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