﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-猪儿笨笨的文档-文章分类-Java开发</title><link>http://www.blogjava.net/wl95421/category/10097.html</link><description>主要是个人的一些思考和技术文章，还有许多翻译的文档</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 11:15:49 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 11:15:49 GMT</pubDate><ttl>60</ttl><item><title>SWT还是Swing</title><link>http://www.blogjava.net/wl95421/articles/41388.html</link><dc:creator>猪儿笨笨</dc:creator><author>猪儿笨笨</author><pubDate>Sun, 16 Apr 2006 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/wl95421/articles/41388.html</guid><wfw:comment>http://www.blogjava.net/wl95421/comments/41388.html</wfw:comment><comments>http://www.blogjava.net/wl95421/articles/41388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wl95421/comments/commentRss/41388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wl95421/services/trackbacks/41388.html</trackback:ping><description><![CDATA[
		<div align="center"> </div>
		<div> </div>
		<div>    我这几年虽然也做了一些相对底层的开发，如工作流等，但主要精力还是在Java UI上，所以对SWT和Swing相对还比较了解，在这里写下我对Swt和Swing的一件看法，供朋友参考。</div>
		<div>    </div>
		<div>    这个问题放在三年前，根本不是一个问题，那个时候的Eclipse用户还比较少，而离开Eclipse的SWT也很难进行独立开发，因此开发UI，仍然是Swing的天下。</div>
		<div>    但是自从基于SWT的RCP正式提出以后，对于Java UI的开发者却不得不面对这样一个问题，SWT还是Swing。</div>
		<div>    其实对于这样的比较，对Swing是有一些不公平的，因为用SWT开发较大的程序，肯定会用到JFace,RCP，这样就好比是用C++与MFC来比较如何写窗口程序一样。严格说起来，应该是Eclipse的RCP和Spring的RCP进行比较才对。但是Spring的RCP我还没有多少使用经验，所以只好先进行一些不太公正的比较了，简单谈谈SWT和Swing的选择。</div>
		<div> </div>
		<div>    <strong>扩展性问题：</strong></div>
		<div> </div>
		<div>    Swing是Sun在AWT失败后重新设计的UI，它不再直接调用本地接口，而是采用自己的UI接口处理一切图形绘制。这样做的结果很明显，它的Swing结构采用的MVC结构非常清楚而且很容易扩展，目前已经有许多漂亮的Swing组件， 但是对于新手级的程序员，要使用一些复杂的控件，如JTable,JTree，还是要花上很多时间学习的。但Swing的问题还是很多，象图形绘制速度慢，有时刷新有问题，线程处理好象也有些问题。</div>
		<div>    Swt是通过控件接口来调用本地API的控件，这样可以获得最本地化的外观效果，但是由于它是严重依赖于本地操作系统提供的控件，而且进行扩展的时候，要针对不同的操作系统进行测试，工作量很大，象我用的KTable在Linux下就有几个问题。这也是SWT控件严重缺乏的原因之一，还好Eclipse最近也成立新的项目组来开发Swt控件，相信不久以后会有好消息。</div>
		<div> </div>
		<div>    <strong>上手问题：</strong></div>
		<div> </div>
		<div>    如果说上手，我从上想到下，还是觉得SWT更快一些。象JTable，我带的几个实习生，研究了一周还不明白怎么用，但是换成Swt，不到三天，就可以照着写程序了。因为Swt提供的是简单易用的API，而要用Swing，首先要明白Swing的结构，对于一般的程序员来说，自然是前者快一些了。</div>
		<div>    如果大家对些有怀疑的话，有空可以去<a href="http://www.java2s.com/">www.java2s.com</a>上去看一看用Swt和Swing分别写一个Table，哪一个的API更容易理解。</div>
		<div>    不过SWT的资源管理确实是一个很大的问题，对于新手而言，结果可能是致命的，有得必有失。</div>
		<div> </div>
		<div>    <strong>框架问题：</strong></div>
		<div>    </div>
		<div>    框架也正是我前面说的不公平问题，Eclipse的Platform和RCP都已经提供了很好的开发框架，如Perspctive和View，Editor，PropertyEditor等。但Swing还没有一个很好的免费的框架，商用的有。因此拿这两者比较还是有失公平的。更不用说Eclipse还提供了很好的扩展机制和国际化处理。</div>
		<div>    现在好象Netbeans也提供了一部分框架的东西，而Spring的RCP也开始初现头角，不过领跑了一年的Eclipse RCP，Netbeans和Spring还是要努力的。</div>
		<div> </div>
		<div> </div>
		<div>    如果一个公司要做一个长期的产品，我只能说Swing在很大程序上还优于SWT，这个优于不是指性能，而是指API的稳定性。从Eclipse2-3.2，长期使用Eclipse的朋友最头疼的可能就是习惯的插件无法运行在新的Eclipse上。而Swing的API相对就稳定的多。</div>
		<div>    当然这里不是绝对不用SWT的，你可以可以在Swt中使用Swing，象Borland的Together for eclipse就是一个最好的例子，这样的结果就是我Eclipse3.0时使用的Community Version Together，在Eclipse3.1.2运行的很好，当然Borland这样做的原因之一也是因为它同时要提供JBuilder的Together，所以Swing是个唯一的选择，但是GEF的API不是很稳定，可能也是Borland放弃GEF的原因，使用了SWT+Swing的概念。</div>
		<div>    最后说一句，无论哪种比较，都只是片面的，还是要根据自己的情况选择合适的UI平台。</div>
		<div> </div>
		<div>    </div>
		<div>        </div>
<img src ="http://www.blogjava.net/wl95421/aggbug/41388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wl95421/" target="_blank">猪儿笨笨</a> 2006-04-16 21:40 <a href="http://www.blogjava.net/wl95421/articles/41388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>