Java桌面应用程序:SWT与Swing [关闭]


158

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

我知道我想使用Java。我以前在网络上使用过它,非常了解语法,并希望应用程序尽可能地跨平台。

我不确定的地方是应该使用SWT还是Swing。当我的主要受众使用Windows时,我希望在那里尽可能使用本机。Linux和Mac应该可以工作,但是外观在这里并不那么重要。

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

谢谢。

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


棘手的问题。:-)我会选择Swing。但是,该决定没有任何赞成或反对意见。
巴勃罗·圣克鲁斯

重复的Q。请在S上查找Swing与SWT Q的问题。FWIW,我之所以使用Swing是因为我了解了这种方式。有本地的外观库(请参阅jgoodies外观)
Jason S 2010年

“构建一个自动化Web应用程序中非常重复的任务的工具”-关于此的任何信息?可能存在一个现有工具-我质疑是否需要桌面应用程序来使其自动化-它可能现在就适合您的情况-但是如果您转向托管解决方案该怎么办?
Nate

您无需学习用于桌面应用程序的GUI框架。如果您可以使用html css和js(我假设您使用的是js),则可以使用Electron来构建具有Web语言的本机外观应用程序。
Pranav A.

我问了这个问题几年后才发明了Electron;)但是,今天当然您是正确的。
janpio

Answers:


152

优点摇摆:

  • java库的一部分,无需其他本机库
  • 在所有平台上均以相同方式工作
  • Netbeans和Eclipse中的集成GUI编辑器
  • Sun / Oracle的优秀在线教程
  • 受官方Java扩展(例如Java OpenGL)支持

缺点摇摆:

  • 本机外观可能与实际本机系统有所不同。
  • 较重的部件(本机/ awt)隐藏摇摆部件,在大多数情况下都不是问题,因为使用较重的部件很少

优点SWT:

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

缺点SWT:

  • 需要每个受支持系统的本机库
  • 由于使用了本机资源,可能无法支持所有系统上的所有行为(提示选项)
  • 在管理本机资源时,本机组件通常将与它们的父级一起处置,而其他资源(如Fonts)则必须手动释放或注册为组件的处置侦听器以自动释放。

33
Swing将更接近“编写一次,随处运行”。SWT更像是“编写一次,到处调整/测试”。但是同样的讨论也发生在其他语言上。
标记

12
实际上,Swing的“本机”外观和感觉与我的Gnome桌面有很大不同-尽管出于某种原因,主题效果很好,但菜单看起来糟透了,几乎无法使用。
小屋2010年

9
从Eclipse 3.7开始,VEP被WindowBuilder(它同时支持Swing和SWT)取代。
阿列克谢·罗曼诺夫

6
SWT的优势还在于,由于使用了本机组件,因此减少了内存消耗。在内存有限的机器上,这是合乎需要的,而在大型GUI设计中,swing和swt之间的内存差异可能很大。
jantobola 2013年

1
@JanTobola这是完全错误的。本机组件使用分配在本机堆上的内存,而不仅仅是在Java堆上。我曾使用Netbeans Platform,Eclipse RCP,SWT和Swing开发大型GUI。在Java的早期版本中,Swing存在一些严重的内存占用问题(当时它是第三方库,而从1.1到1.2也是如此)? ),但这已不再是事实,而是由开发人员在SWT中释放大量资源,SWT会有更多的内存泄漏机会,而未引用的组件最终会被Swing“处置”。
gouessej '18

63

需要考虑的重要一点是,某些用户和某些经销商(Dell)在其64位Windows上安装了64位VM,并且您不能在32位和64位VM上使用相同的SWT库。

这意味着您将需要根据用户使用32位还是64位Java VM分发和测试不同的软件包。例如,使用Azureus可以看到此问题,但是使用Eclipse也可以解决此问题,到目前为止,在前端下载页面上的版本还不能在64位VM上运行。


2
有趣的一点。作为用户,我仍然错开了为什么这么大的问题。但是,是的,所以我将不得不考虑这一点。谢谢。
janpio

顺便说一句:javaws(webstart)不适用于64 IMHO
Karussell 2010年

1
@Karussell:从3/4/2011开始,用于Windows的Sun的64位JVM具有JNLP支持。我认为这已经有一段时间了,但是我不确定要多长时间。
炼金术士

23

秋千:

  • Swing IMHO的最大优点是您不需要随应用程序一起提供库(这避免了数十M​​B(!))。
  • 与早期相比,本机的外观和挥杆感觉要好得多
  • 性能堪比swt(摆动不慢!)
  • NetBeans向Matisse提供了一个舒适的组件生成器。
  • Swing组件在JavaFX中的集成更加容易。

但最重要的是,我不建议使用“纯” swing或swt ;-)有几种应用程序框架可用于swing / swt out。看这里。最大的参与者是netbeans(秋千)和eclipse(swt)。另一个不错的框架可能是griffon,一个不错的“组件集”是数据透视(摆动)。格里芬非常有趣,因为它集成了很多库,不仅摇摆 ; 也可以旋转,SWT等


1
是的,NetBeans将Matisse作为GUI生成器,但是代码的确冗长,易读,几乎无法通过源代码进行编辑。如果您真的想要GUI构建器使用Eclipse WindowBuilder
Pranav

13

我会使用Swing有几个原因。

  • 它已经存在了很长时间,并且对其进行了更多的开发工作。因此,它可能会完成更多功能,并且(可能)会减少错误。

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

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

如果要构建功能非常丰富的应用程序,则可能要签出NetBeans RCP(Rich Client Platform)。有一个学习曲线,但是您可以通过一些实践快速组合好应用程序。我对Eclipse平台的经验不足,无法做出有效的判断。

如果您不想使用整个RCP,则NetBeans还具有许多有用的组件,可以将其拔出并独立使用。

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



8

对于您的需求,听起来似乎最重要的是使用Swing,因为它入门起来比较容易,并且不像SWT那样紧密地集成到本机平台。

挥杆通常是安全的选择。


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

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


4
但请注意,该文章来自2003年...
Alexey Romanov

4

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

如果您的应用程序不会变得太大,或者您的需求太独特而无法由常规业务框架处理,则可以安全地使用Swing。

最后,建议您尝试两种技术,以找到更适合您的一种。像Netbeans vs Eclipse vs IntelliJ一样,这里没有绝对正确的答案,并且这两个框架都有其自身的缺点。

专业摇摆:

  • 更多专家
  • 更像Java(几乎没有公共领域,无需处理资源)

Pro SWT:

  • 更多操作系统本机
  • 快点

10
我认为“更快”的观点很有争议。
Russ Hayward'2

SWT使用起来很麻烦,我必须在每个Windows版本中测试我的GUI,只有在Windows Vista下才能重现某些错误。有些方法根本没有实现,或者在后台调用AWT,这意味着如果没有AWT和Swing,就不能使用紧凑的JRE,而又不会冒破坏SWT的风险。我从2009年开始使用SWT,但我认为,这样做并不快。我建议您提供一个精心设计的基准。
gouessej '18

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


3

SWT的创建是对世纪之交左右Swing呆滞的一种回应。既然性能的差异变得微不足道了,我认为Swing对于您的标准应用程序是一个更好的选择。SWT / Eclipse有一个不错的框架,可以帮助处理许多样板代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.