Live a simple life

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

          【Eclipse插件開發】閑侃AWT、SWING、SWT、JFACE

                 還記得大學里給別人當廉價勞動力(做點小項目,改善點生活~_~)的時候用了不少AWT、SWING,當時也沒有太多去想(當然也沒有絲毫能力去亂想),就是單純地當API來用。工作之后,一直做插件開發,也接觸了SWT、JFACE,當然,經驗也談不上豐富,平時很少寫界面UI的東西。今天閑著,就閑侃一下。
              
                  【AWT和SWT】
                  眾所周知,AWT和swt實現原理是不一樣的:AWT控件相當于是一筆一畫繡出來的,參加java.awt.Component.paint(Graphics g),性能可想而知了;而SWT中呢,是調用了操作系統后臺原生庫,org.eclipse.swt.widgets.Control類型中就沒有類似的paint方法了,但是有一個接口org.eclipse.swt.graphics.Drawable,有興趣的TX可以看一下。實現原理的不同帶來了性能和用戶視覺的差異,也就決定了AWT在某些應用場景下會被拋棄,SWT會被寵幸。
                  
                  【SWING和JFACE】
                  SWING是基于AWT提供的MVC不完全實現,JFACE是基于SWT提供的MVC不完全實現,兩個小框架出來了。底層的AWT和SWT的取舍決定了是選擇SWING還是JFACE,雖然這樣,我們還是看一下兩者的主要差別和主要特點(個人意見、僅供參考)
                  1、兩者的核心作用都是提供了viewer和模型封裝的概念,盡管如此,從設計實現上面講,SWING更加唯美一些,JFACE則更加側重于實用
                  2、SWING和JFACE兩者都偏重于行為控制上下文,而對UI數據(例如,一個文本框控件中的內容)的管理都沒有做太多的設計。JFACE中略有改進,那就是提供了setData的概念,但是不好用~_~。其實說白了為什么沒有做這些的設計,估計是想把自由度開發給開發者,不想做過多的限制,畢竟SWING和JFACE兩個框架的核心就是去封裝底層控件。這間接給UI測試帶來了一些困難,設想如果沒一個Dialog都有一個數據池的概念,用戶的輸入會放入這個數據池,到dialog finish的時候,就從這個數據池中取數據,不再取訪問控件去數據,那么這樣在UI測試的時候可以更方便的去處理數據,很多時候不用去過多的利用鍵盤鉤子的東東
                  3、JFACE是為了Eclipse而生的,雖然后來RCP出來了,又做了其他的包裝宣傳,典型的體現就是提供了JFace Text Framework和其他一些用戶構建Eclipse元素的UI支持。當然,也提供了一些系統資源管理(ImageRegsitry、ResourceManager等)等附加功能。
                  4、SWING和JFACE都是提供了一個小框架,而且是MVC的不完全實現,并不是旨在解決UI創建的所有問題。當然,SWING相比JFACE來說更優雅一些,更mvc一些  

                  【性能差距真那么大嗎?】
                  不完全是。看看人家SUN的高手用AWT和SWING做的IDE工具,有那么差嗎???為什么我們一般開發者用AWT和SWING做出來的UI,效果就差不少呢???水平,SUN牛!!!
                  
                  
                  【核心是什么】
                  我們在接觸這些東西的時候,最核心的在于什么。個人感覺如下:
                  1、基本機理,例如控件如何產生的、事件循環怎樣的、涉及到線程問題..
                  2、SWING和JFACE的MVC思想,本質中的本質。
                  3、JFACE提供的一些Eclipse特性的東西,例如JFace Text Framework、資源管理等

                  PS:SWING和JFACE的源碼質量都是很高很高的,可以經常撒兩眼~_~

                  歡迎拍磚!


          本博客中的所有文章、隨筆除了標題中含有引用或者轉載字樣的,其他均為原創。轉載請注明出處,謝謝!

          posted on 2008-09-01 17:23 zhuxing 閱讀(7000) 評論(6)  編輯  收藏 所屬分類: Eclipse Plug-in & OSGI

          評論

          # re: 【Eclipse插件開發】閑侃AWT、SWING、SWT、JFACE  回復  更多評論   

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

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

          MVC模式在MFC時代就展現的十分完美,比Swing和JFace強大許多。
          2008-09-01 23:11 | Always BaNg.

          # re: 【Eclipse插件開發】閑侃AWT、SWING、SWT、JFACE  回復  更多評論   

          發現博主最愛東拼西湊。。。無聊
          2008-09-02 11:45 | tomay

          # re: 【Eclipse插件開發】閑侃AWT、SWING、SWT、JFACE  回復  更多評論   

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

          # re: 【Eclipse插件開發】閑侃AWT、SWING、SWT、JFACE  回復  更多評論   

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

          為何把 AWT 的控件叫做重量級的,而 SWING 的控件多數為輕量級的,就因為 AWT 的控件有一個操作系統對等的東西,AWT 是在趕工的情況下完成的。

          SWING 并沒有多少是基于 AWT 的,除了 AWT 中的事件類。我喜 SWT,因為他的使用于 MFC 比較相仿。
          2008-09-02 13:34 | 隔葉黃鶯

          # re: 【Eclipse插件開發】閑侃AWT、SWING、SWT、JFACE  回復  更多評論   

          同意樓上所說的AWT是重量級組件,交由對應的peer調用操作系統繪制.

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

          # re: 【Eclipse插件開發】閑侃AWT、SWING、SWT、JFACE  回復  更多評論   

          無聊···
          2010-08-13 09:00 | 愛愛愛
          主站蜘蛛池模板: 旅游| 麻栗坡县| 邢台县| 泗阳县| 赤峰市| 郓城县| 岳普湖县| 洱源县| 临泽县| 长子县| 潮州市| 翁源县| 文昌市| 南江县| 万山特区| 珠海市| 鹤壁市| 璧山县| 通江县| 南乐县| 大兴区| 板桥市| 岑巩县| 中江县| 当涂县| 屯留县| 百色市| 松阳县| 维西| 永嘉县| 永寿县| 滨海县| 牟定县| 萍乡市| 罗城| 桐庐县| 郓城县| 咸宁市| 兴宁市| 武宣县| 石首市|