首页 文章

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

提问于
浏览
151

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

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

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

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

谢谢 .

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

10 回答

  • 3

    Pros Swing:

    • java库的一部分,不需要额外的本机库

    • 在所有平台上的工作方式相同

    • Netbeans和Eclipse中的集成GUI编辑器

    • Sun / Oracle提供了很好的在线教程

    • 由官方java扩展支持(如java OpenGL)

    Cons Swing:

    • 本机外观可能与真实本机系统不同 .

    • 重型组件(native / awt)隐藏摆动组件,大多数时候都不是问题,因为使用重型组件相当罕见

    Pros SWT:

    • 尽可能使用本机元素,因此始终是本机行为

    • 由eclipse支持,gui编辑VEP(VEP也支持Swing和AWT)

    • 大量在线示例

    • 有一个集成的awt / swt桥,允许使用awt和swing组件

    Cons SWT:

    • 需要每个受支持系统的本机库
      由于使用了本机资源,

    • 可能不支持所有系统上的每个行为(提示选项)

    • 管理本机资源,而本机组件通常与其父级其他资源一起处理,例如字体必须手动释放或注册为组件的dispose侦听器以进行自动释放 .

  • 148

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

    这意味着您需要根据用户是使用32位还是64位Java VM来分发和测试不同的软件包 . 例如,请参阅带有Azureus的this problem,但您也可以使用Eclipse,其中截至今天,前端下载页面上的构建不在64位VM上运行 .

  • 4

    职业摇摆:

    • 摆动恕我直言的最大优点是你不需要随你的应用程序运送库(这避免了十几个MB(!)) .

    • 摇摆的原生外观和感觉比早年好得多

    • 性能可与swt相媲美(挥杆不慢!)

    • NetBeans提供Matisse作为舒适的组件构建器 .

    • 在JavaFX中集成Swing组件更容易 .

    但是在底线,我不会真的'摇摆或swt ;-)有几个应用框架可以摆动/ swt out . Look here . 最大的玩家是netbeans(swing)和eclipse(swt) . 另一个不错的框架可能是griffon和一个不错的'set of components'是pivot(swing) . Griffon非常有趣,因为它集成了很多库和not only swing;还有枢轴,swt等

  • 4

    我会使用Swing有几个原因 .

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

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

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

    如果要构建功能丰富的应用程序,可能需要查看NetBeans RCP(富客户端平台) . 有足够的Eclipse平台经验可以做出有效的判断 .

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

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

  • 13

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

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

  • 23

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

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

  • 10

    有趣的问题 . 我不太了解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

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

  • 62

    如果您计划构建具有多个功能的完整功能应用程序,我建议您直接使用Eclipse RCP作为框架 .

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

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

    Pro Swing:

    • 更多专家

    • 更像Java(几乎没有公共字段,不需要在资源上处置)

    Pro SWT:

    • 更多OS原生

    • 更快

  • 8

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

    出于某些原因,使用屏幕阅读器(以及适用于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

  • 6

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

相关问题