Live a simple life

          沉默(zhu_xing@live.cn)
          隨筆 - 48, 文章 - 0, 評(píng)論 - 132, 引用 - 0
          數(shù)據(jù)加載中……

          【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)常撒兩眼~_~

                  歡迎拍磚!


          本博客中的所有文章、隨筆除了標(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

          評(píng)論

          # re: 【Eclipse插件開發(fā)】閑侃AWT、SWING、SWT、JFACE  回復(fù)  更多評(píng)論   

          感覺搞圖形編程,一定要把最成功的Win32 API用一下,會(huì)有很多的收獲,特別是對(duì)于事件處理和GC。

          Swing框架與代碼很優(yōu)美,但一是效率低,特別是高級(jí)控件如各種選擇框超慢,與Windows本身不協(xié)調(diào),使用體驗(yàn)差;二是再怎么使用lookandfeel,還是不美觀,總是感覺畫的不清晰,可能缺少Windows的GDI優(yōu)化吧。

          MVC模式在MFC時(shí)代就展現(xiàn)的十分完美,比Swing和JFace強(qiáng)大許多。
          2008-09-01 23:11 | Always BaNg.

          # re: 【Eclipse插件開發(fā)】閑侃AWT、SWING、SWT、JFACE  回復(fù)  更多評(píng)論   

          發(fā)現(xiàn)博主最愛東拼西湊。。。無聊
          2008-09-02 11:45 | tomay

          # re: 【Eclipse插件開發(fā)】閑侃AWT、SWING、SWT、JFACE  回復(fù)  更多評(píng)論   

          @tomay
          謝謝你的指教
          2008-09-02 12:09 | zhuxing

          # re: 【Eclipse插件開發(fā)】閑侃AWT、SWING、SWT、JFACE  回復(fù)  更多評(píng)論   

          分別在 AWT、SWING 和 SWT 的文本輸入框中點(diǎn)一下右鍵,你就知道哪個(gè)是描繪出來的,哪個(gè)是直接取用操作系統(tǒng)的。

          為何把 AWT 的控件叫做重量級(jí)的,而 SWING 的控件多數(shù)為輕量級(jí)的,就因?yàn)?AWT 的控件有一個(gè)操作系統(tǒng)對(duì)等的東西,AWT 是在趕工的情況下完成的。

          SWING 并沒有多少是基于 AWT 的,除了 AWT 中的事件類。我喜 SWT,因?yàn)樗氖褂糜?MFC 比較相仿。
          2008-09-02 13:34 | 隔葉黃鶯

          # re: 【Eclipse插件開發(fā)】閑侃AWT、SWING、SWT、JFACE  回復(fù)  更多評(píng)論   

          同意樓上所說的AWT是重量級(jí)組件,交由對(duì)應(yīng)的peer調(diào)用操作系統(tǒng)繪制.

          應(yīng)拿swt,jface與awt,draw2d與swing才具可比性.
          優(yōu)劣看你的應(yīng)用.
          swt,jface,再加上uiforms控件,還一些開源控件,這是遠(yuǎn)比awt控件豐富.
          draw2d的控件與swing控件相比,又少的多的多.
          至于速度,看寫程序
          swt,與jface有些人很容易把內(nèi)存用盡.像控件,color,image,Font有人總是忘記用了去dispose.我雖然做了幾年eclipse界面開發(fā),但我還是喜歡swing,比如易于測(cè)試.
          2008-11-26 16:21 | jst designer

          # re: 【Eclipse插件開發(fā)】閑侃AWT、SWING、SWT、JFACE  回復(fù)  更多評(píng)論   

          無聊···
          2010-08-13 09:00 | 愛愛愛
          主站蜘蛛池模板: 永州市| 长寿区| 长阳| 南丰县| 苏州市| 高淳县| 普兰店市| 安龙县| 蒙城县| 金堂县| 林西县| 东兰县| 镇沅| 鸡西市| 怀宁县| 寿光市| 顺义区| 峡江县| 二连浩特市| 彩票| 高雄市| 葵青区| 万盛区| 佛山市| 泰来县| 镇原县| 南召县| 尉犁县| 项城市| 遵化市| 吉木乃县| 荥阳市| 定州市| 宣汉县| 肃宁县| 广饶县| 成都市| 璧山县| 开阳县| 灵山县| 郑州市|