<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常言笑的家

    Spring, Hibernate, Struts, Ajax, RoR

    第一章 Java GUI的發展和演化

     

    概覽

      當Java在1995年的春天第一次發布的時候,它包含了一個叫AWT(Abstract Windowing Toolkit)的庫,用來構建圖形用戶界面應用程序。Java很有雄心的宣言--"write once, run anywhere"許諾:一個具有下拉菜單,命令按鈕,滾動條以及其他常見的GUI控件的應用程序將能夠在各種操作系統上運行而不必重新編譯成針對某一平臺的二進制代碼,包括Microsoft Windows, Sun's own Solaris, Apple's Mac OS以及Linux。

      雖然最初Java是支持操作系統獨立的應用程序開發,在Java提出"write once, run anywhere"宣言那段時間的革命導致了Java applet和主導桌面應用程序計劃的產生。

      盡管從那以后大部分構建桌面應用程序的成就都慢慢衰退,Java構建圖形用戶界面的能力反倒增強了。跟蹤Java GUI的發展和演化,我們將發現3個主要的構建窗口程序庫:AWT,Swing和SWT(Standard Widget Toolkit)。在這一章里我們將查看和分析這3個庫中的每一個庫,并且我們將一起來看一看第4個庫--JFace。其實JFace不算一個真正的構建窗口程序庫,而是在基于SWT之上的一個抽象層。

    AWT

      很多圍繞著介紹Java技術的令人激動的地方都基于applets--一個可以讓程序通過Internet發布并在瀏覽器內執行的新技術。用戶和開發人員都熱衷于斯,因為applets許諾將簡化跨平臺應用程序的開發,維護和發布,而這是商業軟件開發中幾個最富挑戰性的話題。

      為了方便用Java構建圖形用戶界面,Sun最初提供了一個在所有平臺下具有的獨特Java外觀的圖形界面庫。Sun在applet技術策略方面的首要伙伴Netscape提出applets應該維持和運行時平臺一樣的外觀。他們希望applets在某一平臺下在顯示和行為上能夠像其他應用程序一樣。

      為了實現Netscape的"本地外觀"的目標,在JDK的第一個發布版中包含了AWT這個庫。AWT的缺省實現使用了"對等"機制,即每一個Java GUI窗口部件都在底層的窗口系統中有一個對應的組件。

      例如,每一個java.awt.Button對象將在底層窗口系統中創建一個唯一對應的button。當用戶點擊那個按鈕的時候,事件將從本地實現庫傳送到Java虛擬機里,并且最終傳送到與java.awt.Button對象相關聯的邏輯。對等系統的實現以及Java組件與對等組件之間的交流的實現都隱藏在底層JVM實現中,Java語言級的代碼仍然跨平臺。

      盡管如此,為了保持"write once, run anywhere"的許諾,Java不得不妥協和折衷。特別的,Java采用了"最小公分母"的方法,即AWT僅僅提供所有本地窗口系統都提供的特性。這就需要開發人員為更多高級特性開發他們自己的高級窗口部件,然后提供給用戶不同的使用體驗。

      其他的問題也減緩了人們對applets的接受和承認。Applets運行在一個安全的"沙箱"里面并且能夠阻止惡意的applets對文件系統,網絡連接等資源的濫用。盡管沙箱提供了安全性,但它"閹割"了應用程序。畢竟一個應用程序不能運用一個網絡連接來保存一個文件是不好的。Java GUI應用程序也不能像本地程序一樣響應靈敏。這是在當前硬件平臺和Java的解釋性天性下預期結果。

      所以,用AWT開發的應用程序既缺少流行GUI程序的許多特性,又不能達到在顯示和行為上像用本地窗口構建庫開發的程序一樣的目標。應該有一個更好的庫來讓Java GUI取得成功。

    Swing

      于1997年JavaOne大會上提出并在1998年5月發布的JFC(Java Foundation Classes)包含了一個新的使用Java窗口開發包。這個新的GUI組件叫做Swing,感覺到它是對AWT的升級,并且看起來對Java占據計算機世界很有幫助。對Java來說已經萬事具備了:可下載的applets將是未來的軟件,人們將從其他操作系統轉向JavaOS,從傳統的計算機轉向叫做JavaStation的瘦客戶端網絡計算機,Microsoft將最終因為不能在桌面程序領域與之想抗衡而被廢黜。雖然這些景象從來沒有實現,Swing作為Java applets和applications的GUI庫倒確實十分繁榮。

      Swing架構

      盡管"Swing"僅僅是這個新組件的指代名稱,它一直持續使用到今天??赡苁且驗檫@個名稱太貼切了,Swing嘗試著以以下幾種方式改變公認的觀點:
     
      AWT依賴對等架構,用Java代碼包裝本地窗口部件,Swing卻根本不使用本地代碼和本地窗口部件

      AWT把繪制屏幕交給本地窗口部件,Swing自己的組件繪制自己

      因為Swing不依賴本地窗口部件,它可以拋棄AWT的最小公分母的方法并在每個平臺下實現每個窗口部件,從而創建一個比AWT更強大的開發工具包

      Swring缺省情況下采用本地平臺的顯示外觀。然而,它并不僅僅限于此,而是還可以采用插件式的顯示外觀。因此Swing應用程序可以看起來想Windows應用程序,Motif應用程序,Mac應用程序甚至它自己的顯示外觀--"金屬"。所以,Swing應用程序可以完全忽略它運行時所在的操作系統環境并且僅僅看起來像自己。這是單調一致的桌面應用程序外觀的一大挑釁。想象一下Swing有多傲慢!

      盡管如此,Swing組件超越了簡單的窗口部件,它體現了正不斷出現的設計模式以及一些最佳實踐。采用Swing,你不僅僅得到GUI窗口部件的句柄和它所包含的數據,而是定義一個模型去保存數據,定義一個視圖去顯示數據,定義一個控制器去響應用戶輸入。事實上,大部分Swing組件的構建是基于MVC(model-view-controller)模式的。MVC使應用程序開發變得更清晰,更易維護和管理。

      Swing的缺點

      盡管Swing在AWT的基礎上做出了巨大的改進,它仍然沒能使Java作為構建桌面應用程序的工具。也許Swing的擁護者會立即舉出Swing的成功應用案例,例如開源文本編輯器jEdit(http://www.jedit.org/)或者Borland的UML(Unified Modeling Language)建模工具Together( (

      為什么Swing沒有履行它的諾言?原因可能歸結為下面兩點:
      速度的缺乏
      界面外觀

      Swing的狂熱者可能會對Swing速度慢這一點感到忿忿不平。不可否認,JIT(just-in-time)編譯器,Java虛擬機以及Java語言本身就使得Swing應用程序和本地程序拉開了一定差距。盡管如此,Swing仍顯得比本地應用程序行動緩慢和響應不積極。由于桌面計算變得越來越快,用戶的速度期望值也隨之增加,任何可感知的遲緩都將是無法忍受的。

      對Swing的顯示外觀的問題的抱怨也引起了Swing的開發者的憤怒。畢竟他么宣稱Swing擁有各種可插入式的外觀,并且事實上可以顯示成任何樣子。J2SE 1.4.2 甚至添加了對Windows XP和GTK+的支持,以致于在這些平臺下運行的Swing應用程序會自動采用該平臺的外觀。

      盡管如此,問題仍然存在:Swing將一直處于最新的圖形用戶界面的后面,因為必需在Java庫里明確地添加對最新GUI的支持。當使用J2SE 1.4.2 或更早的版本時在Windows XP上運行的Swing應用程序將顯現為Windows 98的外觀。而且,當使用XP themes或WindowBlinds(http://www.stardock.net/)等軟件來改變皮膚或圖形外觀時用戶日益銘記他們自己的特征和個性。而Swing不僅不理會操作系統,甚至連用戶參數選擇也不理會。

      簡短的說,Swing應用程序不像本地應用程序一樣執行,外觀也不一樣。Java要想擺脫常年以來處于不斷學習中的地位并掌握桌面應用程序開發中的眾多角色,它的GUI仍需要改進。

    SWT

      當Eclipse.org社區人員開始構建Eclipse時,他們意識到Swing和AWT都不足以用來構建真實世界的商業程序。結果,他們決定構建一套新的GUI開發工具包用來顯示Eclipse界面。這個工具包借用了VisualAge SmallTalk中的大量的庫。他們把這個新的工具包命名為SWT(Standard Widget Toolkit).意識到本地行為需要本地窗口部件,SWT的設計者們采用了AWT的對等架構,而僅僅當本地組件不存在時(例如Motif下的樹形組件)才求助于Java實現。這樣,SWT吸收了AWT和Swing實現的最好的部分:當可以得到本地組件時使用本地實現,當不能得到本地組件時使用Java實現。這就同時保證了與本地窗口部件相當的外觀和響應度。

      SWT于2001年與Eclipse IDE(Integrated Development Environment)一起集成發布。在這個最初發布版之后,SWT發展和演化為一個獨立的版本。它可以使用與眾多操作系統,包括Microsoft Windows,Mac OS X以及幾種不同風格的Unix等。寫作本書的這個時候,當前官方發布版本為2.1.3。3.0版為beta版,現在也可以下載。本書使用SWT 3.0。

      另一個重要的優勢為SWT的源代碼是在一個開源許可下免費可得并無病毒的。這就意味著你可以在你的應用程序中使用SWT并且在任何許可認證下發布它。源代碼對理解SWT庫的低級別功能性和調試應用程序都是很有幫助的。開源軟件也意味著比商業發布軟件更新的更加頻繁。

    JFace

      JFace的構建基于SWT,它提供了SWT的功能和更簡易的MVC模式。SWT使用直接的API提供了原生的窗口部件,
    例如,你創建一個table部件并且插入你想顯示的行和列的數據。JFace則提供了在SWT基礎之上的抽象層,所
    以你可以對抽象層編程然后抽象層與SWT API交互來替代直接對SWT API編程??紤]一下對本地C窗口部件接口
    編程同使用C++GUI類庫的區別或是使用AWT與Swing的區別。這些類比將有助于闡述SWT與JFace的區別。例如,
    為了使用JFace中的table,你仍舊創建table窗口部件,但是你不向里面插入數據。反而,你將你的content
    (或model) provider類和你的display(或 view) provider類提供給它。接著,table調用你提供的類來決定
    數據內容和怎樣顯示數據內容。

      JFace沒有徹底地抽象SWT。即使在用JFace寫的程序中也會常常出現SWT及它的低級API。在本書第二部分帶
    領您構建正確的SWT基礎之后,我們將在第三部分探究JFace的力量。

    總結

      從最開始Java就提供了構建跨平臺的窗口GUI應用程序庫,從AWT,Swing到現在的SWT和JFace。最初的工具包能力微弱,但是后來提供的工具包認識到之前工具包的缺點并取得了巨大的進步。SWT和JFace不僅使Java成為一個構建桌面應用程序的可行的選擇,也使之成為一個具有優勢的開發平臺。盡管過去對得到輕便和強大的Java系統的嘗試必然意味著接受它在GUI方面的缺點,如今這個不足已經不存在了,Java終于可以統領它在桌面計算應用方面的位置了。

      下一章將介紹Eclipse的使用并展示給你怎樣為構建SWT和JFace應用程序作好準備。

    posted on 2009-10-10 14:47 常言笑 閱讀(143) 評論(0)  編輯  收藏


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


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 114一级毛片免费| 两个人www免费高清视频| 久久久久久精品成人免费图片| 丁香五月亚洲综合深深爱| 四虎影视永久在线精品免费| 日韩一品在线播放视频一品免费| 国产精品亚洲片在线va| 91成人免费观看网站| 亚洲久悠悠色悠在线播放| 韩国日本好看电影免费看| www亚洲精品久久久乳| 亚洲国产成人久久一区WWW| 国产亚洲精品美女久久久久 | 日韩亚洲国产综合高清| 国产片AV片永久免费观看| 亚洲色大成网站www永久网站| 处破痛哭A√18成年片免费| 亚洲国产区男人本色在线观看| 在线观看国产情趣免费视频| 香蕉97碰碰视频免费| 国产V亚洲V天堂A无码| 国产成人福利免费视频| 亚洲av无码成人精品区一本二本| 一级毛片直播亚洲| 久草免费手机视频| 亚洲国产模特在线播放| 日本高清免费中文字幕不卡| 日韩免费码中文在线观看| 久久青青成人亚洲精品| 毛片免费在线观看网站| 黄桃AV无码免费一区二区三区| 亚洲人成电影福利在线播放| 天天操夜夜操免费视频| 人与动性xxxxx免费| 亚洲综合一区二区国产精品| 四虎成人免费影院网址| 国产99久久久国产精免费| 久久精品亚洲中文字幕无码麻豆| 免费看国产精品3a黄的视频| 久久久久久国产a免费观看不卡| 亚洲综合色丁香麻豆|