Java桌面应用程序:SWT与Swing

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

我知道我想用Java。 我之前用过网页的东西,知道的语法相当好,希望应用程序尽可能简单地交叉平台。

我不太确定的是,如果我应该使用SWT或Swing。 由于我的主要用户使用Windows,我想尽可能在​​本地查看它。 Linux和Mac应该可以工作,但在这里看起来并不那么重要。

那么对于每个UI框架,Swing或SWT,争论和反对的是什么呢?

谢谢。

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

优点摆动:

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

缺点:

  • 本机的外观和感觉可能与真实的本机系统有所不同。
  • 重组件(native / awt)隐藏摆动组件,大部分时间没有问题,因为重组件的使用相当罕见

优点SWT:

  • 在可能的情况下使用本地元素,所以始终是本地行
  • 由eclipse支持,gui编辑器VEP(VEP也支持Swing和AWT)
  • 网上有大量的例子
  • 有一个集成的awt / swt桥,允许使用awt和swing组件

缺点SWT:

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

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

这意味着您将需要根据用户是32位还是64位Java VM来分发和testing不同的软件包。 例如,看到Azureus的这个问题 ,但是你也可以在Eclipse中使用,到目前为止,前台下载页面上的内部版本不能在64位虚拟机上运行。

亲摇摆:

  • 摆动恕我直言,最大的优势是,你不需要运送你的应用程序库(这避免了十几MB(!))。
  • 摇摆的本土外观和感觉要比早年好很多
  • 性能媲美swt(挥杆不慢!)
  • NetBeans提供了Matisse作为一个舒适的组件生成器。
  • Swing组件在JavaFX中的集成更容易。

但在底线,我不会build议使用“纯”的挥杆或swt ;-)有几个应用程序框架摆/ swt出。 看这里 最大的玩家是netbeans(swing)和eclipse(swt)。 另一个不错的框架可能是griffon,一个不错的“组件集合”是pivot(swing)。 格里芬是非常有趣的,因为它集成了许多图书馆, 而不仅是摆动 ; 也支点,swt等

我会使用Swing有几个原因。

  • 时间已经越来越长了,应用了更多的开发工作。 因此,它可能更多的function完成,(可能)有更less的错误。

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

  • Swing的变化似乎传播到所有平台,而SWT的变化似乎先在Windows上出现,然后在Linux上出现。

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

如果你不想使用整个RCP,NetBeans也有很多有用的组件,可以独立使用。

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

我selectswing只是因为它是java的“本地”。

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

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

希望你做出正确的决定(如果编码有正确的决定)… 🙂

如果你打算用一些function来构build一个完整的function应用程序,我会build议你直接使用Eclipse RCP作为框架。

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

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

专业摇摆:

  • 更多的专家
  • 更像Java(几乎没有公共领域,不需要configuration资源)

Pro SWT:

  • 更多的OS本地
  • 更快

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

出于某些原因,某些Swing组件在使用屏幕阅读器(和Java AccessBridge for Windows)时效果不佳。 知道不同的屏幕阅读器会导致不同的行为。 在我的经验中,SWT-Tree比屏幕阅读器和Swing-Tree的效果要好得多。 因此我们的应用程序最终使用了SWT和Swing组件。

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

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