2010-02-21 172 views
149

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

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

我不太确定是否应该使用SWT或Swing。当我的主要受众使用Windows时,我想尽可能在​​本地查看它。 Linux和Mac应该可以工作,但这里的外观并不重要。

那么对于每个UI框架,Swing或SWT,有什么争论和反对意见?

谢谢。 PS:我使用Eclipse在Windows上开发。但是正在考虑与Netbeans打比赛。

+0

棘手的问题。 :-)我会和Swing一起去的。但是,没有这个决定的PRO或CON。 – 2010-02-21 14:43:08

+0

重复Q.请在SW上询问Swing与SWT Q的问题。 FWIW,我只是因为我学会了这种方式才使用Swing。有本地的外观库(看jgoodies看起来) – 2010-02-21 14:46:18

+0

“构建一个工具,在web应用程序中自动执行一个非常重复的任务” - 关于这个的任何信息?可能有一个现有的工具 - 我质疑需要桌面应用程序来自动执行此操作 - 它现在可能适用于您的情况 - 但如果转向托管解决方案,该怎么办? – Nate 2010-02-21 14:52:26

回答

145

优点摇摆:Java库的

  • 一部分,无需 额外的机库
  • 适用于所有平台
  • 集成的图形用户界面编辑器在Eclipse和Netbeans
  • 以同样的方式由Sun/Oracle提供的在线教程
  • 官方Java扩展支持(如java OpenGL)

缺点摇摆:

  • 本机的外观和感觉的行为可能与真正的本地 系统 不同。
  • 重质组分(天然/ AWT)隐藏摆动部件,而不是大部分时间的问题,因为如使用重质组分的是相当罕见的

优点SWT:

  • 使用本机元件如果可能的话,所以总是本土行为
  • 通过支持Eclipse,GUI编辑器VEP(VEP还支持Swing和AWT)
  • 大量实例在线
  • 有一个集成的AWT/SWT桥,允许使用AWT和Swing组件

缺点SWT:

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

Swing将更接近“一次编写,随处运行”。 SWT将更像“一次编写,随处调整/测试”。但同样的讨论也发生在其他语言上。 – Mark 2010-02-23 22:06:32

+9

实际上,Swing的“Native”外观和感觉与我的Gnome桌面有很大不同 - 然而,由于某些原因,主题运行得很好,菜单看起来很糟糕,几乎无法使用。 – Hut8 2010-12-09 07:25:39

+7

从Eclipse 3.7开始,VEP被WindowBuilder(它同时支持Swing和SWT)所取代。 – 2011-10-14 08:28:23

8

对于您的需求来说,听起来底线将是使用Swing,因为它比SWT更容易入门,而不像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

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

+3

但是请注意文章是从2003年开始的...... – 2011-10-14 08:30:44

62

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

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

+2

有趣的一点。作为一名用户,我仍然错开了为什么这是件大事。但是,这是我必须考虑的。谢谢。 – janpio 2010-03-03 18:19:18

+1

好点,信息+1。 – posdef 2010-10-18 08:13:31

+0

btw:javaws(webstart)不适用于64 IMHO – Karussell 2010-12-26 14:35:49

4

如果您打算使用一些功能构建完整功能的应用程序,我会建议您直接使用Eclipse RCP作为框架。

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

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

临摆动:

  • 更多的专家
  • 多个Java类(几乎没有公共领域,没有必要配置资源)

临SWT:

  • 更多操作系统本机
  • 更快
+10

我认为“更快”的观点非常有争议。 – 2010-02-21 17:47:58

+0

SWT使用起来很麻烦,我不得不使用每个Windows版本测试我的GUI,有些错误只能在Windows Vista下重现。有些方法简单地未实现,或者在引擎盖下调用AWT,这意味着如果没有AWT和Swing,就不能使用紧凑的JRE,而不会冒险破坏SWT。我在2009年开始使用SWT,并且在我的愚见中,这不是更快。我建议你提供一个精心设计的基准。 – gouessej 2018-02-01 10:04:50

13

我会使用Swing有几个原因。

  • 它存在的时间,并曾 更多的开发精力应用于 它。因此,它可能更多的功能 完成和(可能)有更少的错误。

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

  • 似乎 变更等摇摆同时传播到 所有平台,同时 变化SWT似乎出现在 Windows,则Linux操作系统。

如果您想构建功能丰富的应用程序,您可能需要查看NetBeans RCP(Rich Client Platform)。有一条学习曲线,但您可以通过一点练习快速整理好应用程序。我没有足够的Eclipse平台经验来做出有效的判断。

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

另一个建议的话,看看不同的布局经理。当我学习时,他们绊了我很久。最好的一些甚至不在标准库中。 MigLayout(Swing和SWT)和JGoodies表单工具是我认为最好的两个。

23

亲摆动:

  • 摇摆恕我直言,最大的好处是,你不需要船库与您的应用程序(以避免MB()的打!)。
  • 本机的外观和感觉是swing比早年要好得多
  • 性能与SWT(摆动不慢!)
  • NetBeans的马蒂斯提供一个舒适的组件制造商。
  • Swing组件在JavaFX中的集成更容易。

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

3

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

4

有一点要考虑:屏幕阅读

对于一些原因,使用屏幕阅读(和Java AccessBridge适用于Windows)当一些Swing组件不能很好地工作。知道不同的屏幕阅读器会导致不同的行为。根据我的经验,SWT-Tree与屏幕阅读器相结合的性能要好于Swing-Tree。因此,我们的应用程序最终使用了SWT和Swing组件。

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