链接:https://www.zhihu.com/question/19608871/answer/12378179
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
作为一个和Swing深度打交道10年的我给点个人看法:
Swing的优点:
1:性能不错,因为其底子Java2D还不错,不是极其特别海量级应用基本都可胜任
2:bug并不是想象那么多,这些年sun已修复很多,即使有也很容易到找workaround
3:组件市场谈不上丰富,但该有的也都有了jidesoft,infonode,jfreechart,swinglabs等可以参考
4:大型的应用问题不在于Swing,选用任何其他GUI也都得考虑分业务,分模块加载等问题,这方面NetBeansRCP和EclipseRCP都可以参考,我建议先不考虑引入RCP增加学习指数(包括引入更多风险),如果实在必要需用NetBeansRCP比较舒服,Eclipse的RCP需要考虑Swing和SWT的整合有不少问题恭候着你
Swing的缺点:
1:其MVC的设计框架还是很稳健,使的Swing这么十几年屹立不倒,不过还是显示出了老态和缺陷,这个话题很大可以写好几篇文章,简单说Swing的设计不如Flex的MVP,不如Silverlight/WPF的MVVM易于让程序员编写,测试包括IDE的提供
2:Swing的lookandfeel是很好的思想,但没有设计好,这么多年虽然也有不好官方,开源和商业的LAF出现,但除了官方常用的那几个虽然丑但没有太多bug还算能用,其他我基本不用除非应用不复杂
3:Swing有很多layout初衷很好,但同样问题是众多实现者中没有几款简单易用的,我自己写了个布局这些年我自己一直用自己的这个布局,公司很多其他人也是熟悉哪款可能一辈子就用它了,因为没时间去折腾研究其他款
4:组件的确不是相当丰富完善,一个DateChooser到现在都没个官方的,JDK7只是maybe,确定的是在JDK8提供,当然这不严重前面提到你可以很容易找到其他开源或商业的组件解决,不过也能反映点问题
最后谈点个人经验,我们公司是重度Swing使用者,都是手工写界面代码,如果大型项目自然值得好好投入去积累组件和封装,有了好的封装的组件基本手工代码还是非常简单易读方便维护,另外就像第一点提到Java2D真的不错,如果你觉得那些地方实在太难用了,实在太差丑了,或者实在性能太差了,你完全可以随便扩展个component自己去paint完全用Java2D重新个你满意的组件,有点经验后你会发现写个组件不是那么难,而且还挺有趣。
补充:
感谢不少朋友的顶,收到不少私信询问Swing的技术问题,但我已经五年多没再接触Swing了,对Swing的技术细节问题恐怕很难再一一给答复,对于大型项目的问题,我觉得如果不考虑遗留老系统的维护问题,如今不管大项目小项目HTML5已经足够好了无需犹豫了。