豬兒笨笨的文檔

          主要是個(gè)人的一些思考和技術(shù)文章,還有許多翻譯的文檔

           

          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ā)


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(18)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 玉田县| 民乐县| 兰溪市| 巴林右旗| 灵寿县| 贺州市| 镇江市| 射洪县| 兰坪| 依安县| 冷水江市| 额敏县| 兴隆县| 调兵山市| 枝江市| 宾川县| 武定县| 南澳县| 青州市| 新巴尔虎右旗| 土默特左旗| 汉沽区| 道真| 醴陵市| 江阴市| 大城县| 汤阴县| 藁城市| 连城县| 饶阳县| 项城市| 昌都县| 汾阳市| 龙里县| 化德县| 巴林左旗| 徐汇区| 城口县| 宽城| 汾西县| 侯马市|