望江門外——謝窮的Blog

          分享別人的經典 不如自己締造經典

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            6 Posts :: 1 Stories :: 1 Comments :: 0 Trackbacks
           

          本章涵蓋內容

          SWTJFace的目的

          它們形成的理由

          這兩個類庫如何區別于Swing

          許可證和平臺支持

          2004年三月,Java開發者年度大會宣布了由其讀者選擇的最佳Java組件年度獎結果,超過15,000位開發者投票選舉諸多Java工具套件(當然包括不少聲名顯赫的供應商如OracleApple等)之一。但最終,Eclipse的標準小部件工具套件輕易地擊敗諸多強手,如同其在2003年一樣贏得了年度最佳。

          雖然EclipseJava開發領域的遲到者,但其同樣在JavaWorld, JavaProLinuxWorld社區獲得了榮耀。一路而來如潮的掌聲和好評彰顯了Eclipse對于Java開發的巨大沖擊和影響。在過去的每一天,全球的Java開發者們不斷被SWTJFace強勁的功能和部署新插件和獨立應用程序的能力所折服。

          本書的主旨就是在于向你展示這一功能套件的功效和你如何將其應用于你現成的項目之中去。需要指出的是:

          開發基于SWT/JFace的應用程序

          SWT內置的圖形語義環境生成定制化圖形

          理解SWTJFace后面的結構和方法論

          開闊你的GUI設計的知識面

          構建和部署EclipseSWTJFace應用程序或獨立應用程序

          最重要的是GUI開發應當是一項充滿樂趣的工作!沒有一個編程工作能給你這樣子的快感。因此,我們將SWTJFace的理論用實例代碼貫穿始終來顯示GUI開發實踐。但在開始之前,我們需要向您簡要闡明該技術是什么和它能幫你作什么。

          1.1 什么是SWT/JFace?

          雖然我們都知道SWTJFace是工具(套件),但更科學地講它們是軟件類庫。它們由包含java類和接口的文件包組成。但又是什么使得這些組件能讓你任意組合GUI呢?你的應用程序可以快速運行,高效運用計算機內存并有著和操作系統界面相同的界面體驗,沒有其他的GUI構建體系可以如此。雖然SWTJFace實現了相同的功能,但它們產生用戶界面的機理卻是迥然不同的。

          我們試圖通過汽車驅動機理來類比這一情況:SWT開發就像標準的汽車驅動模式,它給了你更多的控制權力,并有機會接觸系統內部的東西,但是其使用是相當復雜的;而JFace情況下,就像是汽車的自動驅動模式,你不必深入太多,但是你喪失了靈活性。當然,實際情況肯定比這個比喻要更為復雜。所以我們需要更進一步的討論這兩個類庫。

          1.1.1 SWT構建GUIs

          每一個操作系統都會有大量的圖形組件來構成其默認的用戶界面。這一些包括有:按鈕、窗口、菜單以及諸如此類。SWT的目標就是給予你直接獲得這些組件的途徑,然后如你所愿地將它們定位和設置。你不必擔心最終用戶的操作系統如何,當你在應用程序中加入一個按鈕,它就會在Windows中表現得如同Windows得按鈕,在Mac中如Mac的按鈕,當然在Linux中亦是如此。用戶會認為你這是為他們的機器定制,而他們并不清楚事實上你僅用SWT寫了一遍代碼。

          除了圖形組件,SWT還提供事件處理,這意味著你可以追蹤你的用戶按下了哪個按鈕或是選擇了哪個菜單項目。這一強勁的功能使得對用戶任意形式輸入產生反應成為可能。接下來我們會花大量篇幅來演示這是如何運作的。

          最后,如你想在你的應用程序中加入圖形,SWT提供大量的工具來產生圖形,處理新字體或是繪制形狀。這些圖形可以使得你不盡可以構建圖形,還可以讓你控制圖形何時、何地和如何地在你的GUI中顯現。本書會向你演示SWT如何管理顏色、繪圖、字體、圖案,并貢獻了大量的實例代碼。

          SWT提供了構建用戶界面的巨大能力,但是將如你在本書中所見,代碼將會變得冗長而且復雜。正因如此,Eclipse的設計者推出了GUI開發的第二個類庫:JFace

          1.1.2 JFace來簡化GUI開發

          為避免一遍遍地使用SWT來寫重復的代碼,Eclipse的設計者用Eclipse工作臺產生了JFace。這個類庫提供大量的快捷方式以削減因單獨使用SWT而大量耗費的時間,但另一方面,JFace不能完全取代SWT,許多GUI的開發還需要兩個套件的特性。

          Jface高效的一個例證就是其事件處理。在許多用戶界面中,你或許要處理諸多不同的事件,如:點擊按鈕、敲擊鍵盤或者菜單項選擇,而事實上如上事件都在實現同一功能,在此情況下,SWT的處理方式是需要對每一個事件單獨安排接受和處理過程;而在JFace中允許你將他們組合成一個單一對象,這樣你可以集中精力于如何應對事件(對象)的處理,而不必理睬事件是如何激發的。這一簡單但強力的概念使得你可以在你的GUI中加入菜單、工具條或甚至是調色板而不需加入一大堆代碼。

          Jface另一個有助益的地方就是當你在構建大型的多窗口、多圖形的GUI時,它可以通過其特有的注冊類來幫你組織SWT部件和管理內存開銷。舉個例子,在SWT中,你需要把你應用程序中的字體和位圖的生成和分布要予以說明;而在JFace中,你大可使用其內置的FontRegistryImageRegistry對象來處理這些乏味的問題。

          現在你應該基本理解了這兩個類庫的特性,接下來我們要更進一步以闡明它們的一些設計概念。

           

          我們將快速瀏覽如下這些論題:它們是如何在操作系統中表現的,初始產生又是如何的等等。

          1.2 揭開其面紗

          在用戶街面上添加組件、事件和圖形并不是新鮮玩意兒了,然而SWTJFace何以會激起千層浪呢?在這里你需要理解設計者的孤心苦詣了。而這又要牽涉到深層次的Java GUI開發的原則問題以及如何使用這些類庫等等。而在我們深入探討SWT/JFaceJFace之前,我們還是有必要介紹一下SwingSWTJFace的產生也正是Swing類庫(的不爭氣)而產生,通過比照這SwingSWT兩個類庫的涉及哲學,你會更折服與SWTJFace的運行機制;通過這些,你或許也會加入到Java開發的SwingSWT/JFace兩大陣營日益白熱化的爭論之中。

          1.2.1 Swing:老的替代品

          sun1998年發布Swing類庫時,Java開發陣營相當的歡欣鼓舞。因為最終Sun能夠以這一工具套件的平臺無關的特性來實踐其“編寫一次,到處運行”的信條了。Swing也成為之后Java GUI開發的最為流行的工具。

          但隨著時間的推移,許多開發人員又失望了:Sun在造就Swing迷人特性的同時,也使得程序開發日見復雜,運行效率日益低下。正因如此,很少有看到成功的Java GUI開發的桌面應用。

          Swing的渲染

          為了確保界面在跨平臺是能保持一致,Swing對用戶界面的每一個細節的渲染進行完全控制,也就是Java虛擬機指令到其組件的每一個象素和具體行為。雖然Swing也同底層平臺保持通信,但是卻不使用操作系統任何已內置的對象,即其白手起家,創建每一個對象。因為這些組件都運行于較高層次,它們被引喻為輕量級組件。這些組件在任何Java支持的平臺上表現一致。

          但是這種方式是有缺陷的,因為JVM要管理細化到GUI的每一個細節表現和行為,相對于直接依于操作系統的應用程序運行就十分緩慢了。而用戶來說,他們絕大多數都偏好于操作系統的界面特性。

          Swing的自動垃圾回收機制

          為了確保Java的可靠性運算保證,Swing沿用了Java的自動垃圾回收機制——AGC。這產生了一個威脅和隱患,因為在應用程序層面上,對于對象的內存分配起始已經不需要了。在程序獨立于開發人員而運行時AGC被激發,其一個重要的能力就是如果程序員不釋放他們的數據,其他程序就無法為其對象調用這塊內存。

          AGC的一個好處就是開發人員只需關注編程而不必關心每一個對象的生命周期,而另一方面,內存分配基制是你無從知曉它會何時發生,另外AGC的能力也會因JVM身處的操作系統平臺的不同而不同。因此,由于大型應用程序內對象產生和丟棄的時效特性,程序的表現在各個不同系統內就無規律可循了。

          Swing的設計架構

          Swing通過MVC模式來指導GUI設計進程。MVC將用戶接口組件分解為三塊:狀態信息、顯示和對外界事件的反應能力,就是俗稱的模型、視圖和控制。Swing的設計者修改了這一方法論并產生了模型代理架構,如圖1.2。這一架構整合了部件的視圖和控制部分成為一個UI代理模塊。所以對于每一個單獨的用戶界面組件如按鈕、框架、和label-Swing分配內存均包含這組件狀態信息和UI代理,也即其既控制著表征和事件反應。

          通過將模型信息從表征分離出來,Swing提供了一個編程方法論,它確保了靈活、可重用編程。但這一能力對于每一個部件都產生了多個對象。當GUI變得復雜是,這一額外的分派和丟棄做法會對處理器產生巨大的負擔。

          posted on 2011-05-19 09:32 望江門外 閱讀(305) 評論(0)  編輯  收藏 所屬分類: SWT/JFace in Action

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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 岱山县| 买车| 上蔡县| 张掖市| 民勤县| 凤冈县| 黑水县| 河南省| 沅陵县| 汾西县| 新野县| 崇左市| 交口县| 高碑店市| 宽城| 桐庐县| 渑池县| 济南市| 老河口市| 津市市| 衡阳市| 庆安县| 深泽县| 呼图壁县| 娱乐| 平乐县| 临高县| 青田县| 金昌市| 三门县| 广汉市| 枣阳市| 吉林省| 永善县| 郧西县| 海原县| 巴林左旗| 灌阳县| 随州市| 锦屏县| 土默特右旗|