Java桌面应用程序:SWT与Swing

jan*_*pio 156 java swing swt

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

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

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

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

谢谢.

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

jos*_*efx 151

职业摇摆:

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

Cons Swing:

  • 本机外观可能与真实本机系统不同.
  • 重型组件(native/awt)隐藏摆动组件,大多数时候都不是问题,因为使用重型组件相当罕见

优点SWT:

  • 尽可能使用本机元素,因此始终是本机行为
  • eclipse支持,gui编辑VEP(VEP也支持Swing和AWT)
  • 网上有大量的例子
  • 有一个集成的awt/swt桥,允许使用awt和swing组件

Cons SWT:

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

  • Swing将更接近"一次编写,随处运行".SWT将更像是"一次编写,调整/测试无处不在".但同样的讨论也发生在其他语言上. (32认同)
  • 实际上,Swing的"原生"外观和感觉与我的Gnome桌面有很大的不同 - 虽然由于某种原因,主题效果很好,菜单看起来很糟糕,几乎无法使用. (12认同)
  • 从Eclipse 3.7开始,VEP被WindowBuilder取代(它也同时支持Swing和SWT). (9认同)
  • 由于本机组件,SWT的优势还在于更少的内存消耗.这在内存有限的机器上应该是理想的,并且在大型GUI设计中,swing和swt之间的内存差异可能很大. (6认同)

Lud*_*her 63

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

这意味着您需要根据用户是使用32位还是64位Java VM来分发和测试不同的软件包.例如,使用Azureus可以看到这个问题,但是你也可以使用Eclipse,从今天开始,前端下载页面上的版本不能在64位虚拟机上运行.

  • 有趣的一点.作为一个用户,我仍然错开了为什么这是一个大问题.但是,我必须考虑这一点.谢谢. (2认同)

Kar*_*ell 23

职业摇摆:

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

但在底线我不建议使用'纯'摇摆或swt ;-)有几个应用程序框架用于摆动/ swt out.看这里.最大的玩家是netbeans(swing)和eclipse(swt).另一个不错的框架可能是griffon,一个很好的'组件'是pivot(swing).格里芬非常有趣,因为它集成了很多图书馆而不仅仅是摇摆 ; 还有枢轴,swt等


cla*_*taq 13

我会使用Swing有几个原因.

  • 它已经存在了很长时间,并且已经应用​​了更多的开发工作.因此,它可能更完整,并且(可能)具有更少的错误.

  • 有关生产高性能应用程序的大量文档和其他指导.

  • 似乎Swing的更改会同时传播到所有平台,而SWT的更改似乎首先出现在Windows上,然后出现在Linux上.

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

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

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


zer*_*oed 10

我选择摇摆只是因为它是java的"原生".

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

  • 链接已损坏! (2认同)

Yuv*_*dam 8

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

挥杆通常是一个安全的赌注.


Buh*_*ndi 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)

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

  • 但要注意这篇文章是从2003年开始的...... (4认同)

小智 5

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

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

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