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上进行的比较。
这里是您可以获得有关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有一个很好的框架,可以帮助大量的锅炉板代码。