?
?
????我這幾年雖然也做了一些相對底層的開發,如工作流等,但主要精力還是在Java UI上,所以對SWT和Swing相對還比較了解,在這里寫下我對Swt和Swing的一件看法,供朋友參考。
????
????這個問題放在三年前,根本不是一個問題,那個時候的Eclipse用戶還比較少,而離開Eclipse的SWT也很難進行獨立開發,因此開發UI,仍然是Swing的天下。
????但是自從基于SWT的RCP正式提出以后,對于Java UI的開發者卻不得不面對這樣一個問題,SWT還是Swing。
????其實對于這樣的比較,對Swing是有一些不公平的,因為用SWT開發較大的程序,肯定會用到JFace,RCP,這樣就好比是用C++與MFC來比較如何寫窗口程序一樣。嚴格說起來,應該是Eclipse的RCP和Spring的RCP進行比較才對。但是Spring的RCP我還沒有多少使用經驗,所以只好先進行一些不太公正的比較了,簡單談談SWT和Swing的選擇。
?
????擴展性問題:
?
????Swing是Sun在AWT失敗后重新設計的UI,它不再直接調用本地接口,而是采用自己的UI接口處理一切圖形繪制。這樣做的結果很明顯,它的Swing結構采用的MVC結構非常清楚而且很容易擴展,目前已經有許多漂亮的Swing組件, 但是對于新手級的程序員,要使用一些復雜的控件,如JTable,JTree,還是要花上很多時間學習的。但Swing的問題還是很多,象圖形繪制速度慢,有時刷新有問題,線程處理好象也有些問題。
????Swt是通過控件接口來調用本地API的控件,這樣可以獲得最本地化的外觀效果,但是由于它是嚴重依賴于本地操作系統提供的控件,而且進行擴展的時候,要針對不同的操作系統進行測試,工作量很大,象我用的KTable在Linux下就有幾個問題。這也是SWT控件嚴重缺乏的原因之一,還好Eclipse最近也成立新的項目組來開發Swt控件,相信不久以后會有好消息。
?
????上手問題:
?
????如果說上手,我從上想到下,還是覺得SWT更快一些。象JTable,我帶的幾個實習生,研究了一周還不明白怎么用,但是換成Swt,不到三天,就可以照著寫程序了。因為Swt提供的是簡單易用的API,而要用Swing,首先要明白Swing的結構,對于一般的程序員來說,自然是前者快一些了。
????如果大家對些有懷疑的話,有空可以去
www.java2s.com上去看一看用Swt和Swing分別寫一個Table,哪一個的API更容易理解。
????不過SWT的資源管理確實是一個很大的問題,對于新手而言,結果可能是致命的,有得必有失。
?
????框架問題:
????
????框架也正是我前面說的不公平問題,Eclipse的Platform和RCP都已經提供了很好的開發框架,如Perspctive和View,Editor,PropertyEditor等。但Swing還沒有一個很好的免費的框架,商用的有。因此拿這兩者比較還是有失公平的。更不用說Eclipse還提供了很好的擴展機制和國際化處理。
????現在好象Netbeans也提供了一部分框架的東西,而Spring的RCP也開始初現頭角,不過領跑了一年的Eclipse RCP,Netbeans和Spring還是要努力的。
?
?
????如果一個公司要做一個長期的產品,我只能說Swing在很大程序上還優于SWT,這個優于不是指性能,而是指API的穩定性。從Eclipse2-3.2,長期使用Eclipse的朋友最頭疼的可能就是習慣的插件無法運行在新的Eclipse上。而Swing的API相對就穩定的多。
????當然這里不是絕對不用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的概念。
????最后說一句,無論哪種比較,都只是片面的,還是要根據自己的情況選擇合適的UI平臺。
?
????
????????