SWT還是Swing
?
?
????我這幾年雖然也做了一些相對底層的開發(fā),如工作流等,但主要精力還是在Java UI上,所以對SWT和Swing相對還比較了解,在這里寫下我對Swt和Swing的一件看法,供朋友參考。
????
????這個(gè)問題放在三年前,根本不是一個(gè)問題,那個(gè)時(shí)候的Eclipse用戶還比較少,而離開Eclipse的SWT也很難進(jìn)行獨(dú)立開發(fā),因此開發(fā)UI,仍然是Swing的天下。
????但是自從基于SWT的RCP正式提出以后,對于Java UI的開發(fā)者卻不得不面對這樣一個(gè)問題,SWT還是Swing。
????其實(shí)對于這樣的比較,對Swing是有一些不公平的,因?yàn)橛肧WT開發(fā)較大的程序,肯定會用到JFace,RCP,這樣就好比是用C++與MFC來比較如何寫窗口程序一樣。嚴(yán)格說起來,應(yīng)該是Eclipse的RCP和Spring的RCP進(jìn)行比較才對。但是Spring的RCP我還沒有多少使用經(jīng)驗(yàn),所以只好先進(jìn)行一些不太公正的比較了,簡單談?wù)凷WT和Swing的選擇。
?
????擴(kuò)展性問題:
?
????Swing是Sun在AWT失敗后重新設(shè)計(jì)的UI,它不再直接調(diào)用本地接口,而是采用自己的UI接口處理一切圖形繪制。這樣做的結(jié)果很明顯,它的Swing結(jié)構(gòu)采用的MVC結(jié)構(gòu)非常清楚而且很容易擴(kuò)展,目前已經(jīng)有許多漂亮的Swing組件, 但是對于新手級的程序員,要使用一些復(fù)雜的控件,如JTable,JTree,還是要花上很多時(shí)間學(xué)習(xí)的。但Swing的問題還是很多,象圖形繪制速度慢,有時(shí)刷新有問題,線程處理好象也有些問題。
????Swt是通過控件接口來調(diào)用本地API的控件,這樣可以獲得最本地化的外觀效果,但是由于它是嚴(yán)重依賴于本地操作系統(tǒng)提供的控件,而且進(jìn)行擴(kuò)展的時(shí)候,要針對不同的操作系統(tǒng)進(jìn)行測試,工作量很大,象我用的KTable在Linux下就有幾個(gè)問題。這也是SWT控件嚴(yán)重缺乏的原因之一,還好Eclipse最近也成立新的項(xiàng)目組來開發(fā)Swt控件,相信不久以后會有好消息。
?
????上手問題:
?
????如果說上手,我從上想到下,還是覺得SWT更快一些。象JTable,我?guī)У膸讉€(gè)實(shí)習(xí)生,研究了一周還不明白怎么用,但是換成Swt,不到三天,就可以照著寫程序了。因?yàn)镾wt提供的是簡單易用的API,而要用Swing,首先要明白Swing的結(jié)構(gòu),對于一般的程序員來說,自然是前者快一些了。
????如果大家對些有懷疑的話,有空可以去www.java2s.com上去看一看用Swt和Swing分別寫一個(gè)Table,哪一個(gè)的API更容易理解。
????不過SWT的資源管理確實(shí)是一個(gè)很大的問題,對于新手而言,結(jié)果可能是致命的,有得必有失。
?
????框架問題:
????
????框架也正是我前面說的不公平問題,Eclipse的Platform和RCP都已經(jīng)提供了很好的開發(fā)框架,如Perspctive和View,Editor,PropertyEditor等。但Swing還沒有一個(gè)很好的免費(fèi)的框架,商用的有。因此拿這兩者比較還是有失公平的。更不用說Eclipse還提供了很好的擴(kuò)展機(jī)制和國際化處理。
????現(xiàn)在好象Netbeans也提供了一部分框架的東西,而Spring的RCP也開始初現(xiàn)頭角,不過領(lǐng)跑了一年的Eclipse RCP,Netbeans和Spring還是要努力的。
?
?
????如果一個(gè)公司要做一個(gè)長期的產(chǎn)品,我只能說Swing在很大程序上還優(yōu)于SWT,這個(gè)優(yōu)于不是指性能,而是指API的穩(wěn)定性。從Eclipse2-3.2,長期使用Eclipse的朋友最頭疼的可能就是習(xí)慣的插件無法運(yùn)行在新的Eclipse上。而Swing的API相對就穩(wěn)定的多。
????當(dāng)然這里不是絕對不用SWT的,你可以可以在Swt中使用Swing,象Borland的Together for eclipse就是一個(gè)最好的例子,這樣的結(jié)果就是我Eclipse3.0時(shí)使用的Community Version Together,在Eclipse3.1.2運(yùn)行的很好,當(dāng)然Borland這樣做的原因之一也是因?yàn)樗瑫r(shí)要提供JBuilder的Together,所以Swing是個(gè)唯一的選擇,但是GEF的API不是很穩(wěn)定,可能也是Borland放棄GEF的原因,使用了SWT+Swing的概念。
????最后說一句,無論哪種比較,都只是片面的,還是要根據(jù)自己的情況選擇合適的UI平臺。
?
????
????????
posted on 2006-04-16 21:40 豬兒笨笨 閱讀(2267) 評論(0) 編輯 收藏 所屬分類: Java開發(fā)