【Eclipse插件開發(fā)】閑侃AWT、SWING、SWT、JFACE
還記得大學(xué)里給別人當(dāng)廉價(jià)勞動(dòng)力(做點(diǎn)小項(xiàng)目,改善點(diǎn)生活~_~)的時(shí)候用了不少AWT、SWING,當(dāng)時(shí)也沒有太多去想(當(dāng)然也沒有絲毫能力去亂想),就是單純地當(dāng)API來用。工作之后,一直做插件開發(fā),也接觸了SWT、JFACE,當(dāng)然,經(jīng)驗(yàn)也談不上豐富,平時(shí)很少寫界面UI的東西。今天閑著,就閑侃一下。
【AWT和SWT】
眾所周知,AWT和swt實(shí)現(xiàn)原理是不一樣的:AWT控件相當(dāng)于是一筆一畫繡出來的,參加java.awt.Component.paint(Graphics g),性能可想而知了;而SWT中呢,是調(diào)用了操作系統(tǒng)后臺(tái)原生庫(kù),org.eclipse.swt.widgets.Control類型中就沒有類似的paint方法了,但是有一個(gè)接口org.eclipse.swt.graphics.Drawable,有興趣的TX可以看一下。實(shí)現(xiàn)原理的不同帶來了性能和用戶視覺的差異,也就決定了AWT在某些應(yīng)用場(chǎng)景下會(huì)被拋棄,SWT會(huì)被寵幸。
【SWING和JFACE】
SWING是基于AWT提供的MVC不完全實(shí)現(xiàn),JFACE是基于SWT提供的MVC不完全實(shí)現(xiàn),兩個(gè)小框架出來了。底層的AWT和SWT的取舍決定了是選擇SWING還是JFACE,雖然這樣,我們還是看一下兩者的主要差別和主要特點(diǎn)(個(gè)人意見、僅供參考)
1、兩者的核心作用都是提供了viewer和模型封裝的概念,盡管如此,從設(shè)計(jì)實(shí)現(xiàn)上面講,SWING更加唯美一些,JFACE則更加側(cè)重于實(shí)用
2、SWING和JFACE兩者都偏重于行為控制上下文,而對(duì)UI數(shù)據(jù)(例如,一個(gè)文本框控件中的內(nèi)容)的管理都沒有做太多的設(shè)計(jì)。JFACE中略有改進(jìn),那就是提供了setData的概念,但是不好用~_~。其實(shí)說白了為什么沒有做這些的設(shè)計(jì),估計(jì)是想把自由度開發(fā)給開發(fā)者,不想做過多的限制,畢竟SWING和JFACE兩個(gè)框架的核心就是去封裝底層控件。這間接給UI測(cè)試帶來了一些困難,設(shè)想如果沒一個(gè)Dialog都有一個(gè)數(shù)據(jù)池的概念,用戶的輸入會(huì)放入這個(gè)數(shù)據(jù)池,到dialog finish的時(shí)候,就從這個(gè)數(shù)據(jù)池中取數(shù)據(jù),不再取訪問控件去數(shù)據(jù),那么這樣在UI測(cè)試的時(shí)候可以更方便的去處理數(shù)據(jù),很多時(shí)候不用去過多的利用鍵盤鉤子的東東
3、JFACE是為了Eclipse而生的,雖然后來RCP出來了,又做了其他的包裝宣傳,典型的體現(xiàn)就是提供了JFace Text Framework和其他一些用戶構(gòu)建Eclipse元素的UI支持。當(dāng)然,也提供了一些系統(tǒng)資源管理(ImageRegsitry、ResourceManager等)等附加功能。
4、SWING和JFACE都是提供了一個(gè)小框架,而且是MVC的不完全實(shí)現(xiàn),并不是旨在解決UI創(chuàng)建的所有問題。當(dāng)然,SWING相比JFACE來說更優(yōu)雅一些,更mvc一些
【性能差距真那么大嗎?】
不完全是。看看人家SUN的高手用AWT和SWING做的IDE工具,有那么差嗎???為什么我們一般開發(fā)者用AWT和SWING做出來的UI,效果就差不少呢???水平,SUN牛!??!
【核心是什么】
我們?cè)诮佑|這些東西的時(shí)候,最核心的在于什么。個(gè)人感覺如下:
1、基本機(jī)理,例如控件如何產(chǎn)生的、事件循環(huán)怎樣的、涉及到線程問題..
2、SWING和JFACE的MVC思想,本質(zhì)中的本質(zhì)。
3、JFACE提供的一些Eclipse特性的東西,例如JFace Text Framework、資源管理等
PS:SWING和JFACE的源碼質(zhì)量都是很高很高的,可以經(jīng)常撒兩眼~_~
歡迎拍磚!
【AWT和SWT】
眾所周知,AWT和swt實(shí)現(xiàn)原理是不一樣的:AWT控件相當(dāng)于是一筆一畫繡出來的,參加java.awt.Component.paint(Graphics g),性能可想而知了;而SWT中呢,是調(diào)用了操作系統(tǒng)后臺(tái)原生庫(kù),org.eclipse.swt.widgets.Control類型中就沒有類似的paint方法了,但是有一個(gè)接口org.eclipse.swt.graphics.Drawable,有興趣的TX可以看一下。實(shí)現(xiàn)原理的不同帶來了性能和用戶視覺的差異,也就決定了AWT在某些應(yīng)用場(chǎng)景下會(huì)被拋棄,SWT會(huì)被寵幸。
【SWING和JFACE】
SWING是基于AWT提供的MVC不完全實(shí)現(xiàn),JFACE是基于SWT提供的MVC不完全實(shí)現(xiàn),兩個(gè)小框架出來了。底層的AWT和SWT的取舍決定了是選擇SWING還是JFACE,雖然這樣,我們還是看一下兩者的主要差別和主要特點(diǎn)(個(gè)人意見、僅供參考)
1、兩者的核心作用都是提供了viewer和模型封裝的概念,盡管如此,從設(shè)計(jì)實(shí)現(xiàn)上面講,SWING更加唯美一些,JFACE則更加側(cè)重于實(shí)用
2、SWING和JFACE兩者都偏重于行為控制上下文,而對(duì)UI數(shù)據(jù)(例如,一個(gè)文本框控件中的內(nèi)容)的管理都沒有做太多的設(shè)計(jì)。JFACE中略有改進(jìn),那就是提供了setData的概念,但是不好用~_~。其實(shí)說白了為什么沒有做這些的設(shè)計(jì),估計(jì)是想把自由度開發(fā)給開發(fā)者,不想做過多的限制,畢竟SWING和JFACE兩個(gè)框架的核心就是去封裝底層控件。這間接給UI測(cè)試帶來了一些困難,設(shè)想如果沒一個(gè)Dialog都有一個(gè)數(shù)據(jù)池的概念,用戶的輸入會(huì)放入這個(gè)數(shù)據(jù)池,到dialog finish的時(shí)候,就從這個(gè)數(shù)據(jù)池中取數(shù)據(jù),不再取訪問控件去數(shù)據(jù),那么這樣在UI測(cè)試的時(shí)候可以更方便的去處理數(shù)據(jù),很多時(shí)候不用去過多的利用鍵盤鉤子的東東
3、JFACE是為了Eclipse而生的,雖然后來RCP出來了,又做了其他的包裝宣傳,典型的體現(xiàn)就是提供了JFace Text Framework和其他一些用戶構(gòu)建Eclipse元素的UI支持。當(dāng)然,也提供了一些系統(tǒng)資源管理(ImageRegsitry、ResourceManager等)等附加功能。
4、SWING和JFACE都是提供了一個(gè)小框架,而且是MVC的不完全實(shí)現(xiàn),并不是旨在解決UI創(chuàng)建的所有問題。當(dāng)然,SWING相比JFACE來說更優(yōu)雅一些,更mvc一些
【性能差距真那么大嗎?】
不完全是。看看人家SUN的高手用AWT和SWING做的IDE工具,有那么差嗎???為什么我們一般開發(fā)者用AWT和SWING做出來的UI,效果就差不少呢???水平,SUN牛!??!
【核心是什么】
我們?cè)诮佑|這些東西的時(shí)候,最核心的在于什么。個(gè)人感覺如下:
1、基本機(jī)理,例如控件如何產(chǎn)生的、事件循環(huán)怎樣的、涉及到線程問題..
2、SWING和JFACE的MVC思想,本質(zhì)中的本質(zhì)。
3、JFACE提供的一些Eclipse特性的東西,例如JFace Text Framework、資源管理等
PS:SWING和JFACE的源碼質(zhì)量都是很高很高的,可以經(jīng)常撒兩眼~_~
歡迎拍磚!
本博客中的所有文章、隨筆除了標(biāo)題中含有引用或者轉(zhuǎn)載字樣的,其他均為原創(chuàng)。轉(zhuǎn)載請(qǐng)注明出處,謝謝!
posted on 2008-09-01 17:23 zhuxing 閱讀(7000) 評(píng)論(6) 編輯 收藏 所屬分類: Eclipse Plug-in & OSGI