熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Java GUI三劍客風雲爭霸

2013-11-23 20:17:17  來源: Java開源技術 

  進行Java GUI(Graphical User Interface圖形用戶界面)編程大家或許經常徘徊在SWT/JFACE Swing AWT之間選擇哪一個更合適自己?AWT作為Java語言的第一個GUI類庫包在這三者之間中年齡最長可謂開國元勳老二Swing兼容AWT同時又對AWT進行了改進可謂站在前輩的肩膀上自然就會看的遠了老三SWT/JFace則只能用不走尋常路來形容它SWT/JFace采取了與AWT和Swing完全不同的技術路線這三劍客之間究竟孰優孰劣且聽下文分解

窮途末路的AWT
    AWT(Abstract Windowing Toolkit)中文譯為抽象窗口工具包是Java提供的用來建立和設置Java的圖形用戶界面的基本工具AWT由Java中的javaawt包提供裡面包含了許多可用來建立與平台無關的圖形用戶界面(GUI)的類這些類被稱為組件(components)

    抽象窗口工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台獨立的窗口系統 圖形和用戶界面器件工具包AWT是Java基礎類 (JFC)的一部分為Java程序提供圖形用戶界面(GUI)的標准API

    AWT提供了Java Applet和Java Application中可用的用戶圖形界面GUI中的基本組件(components)由於Java是一種獨立於平的程序設計語言但GUI卻往往是依賴於特定平台的Java采用了相應的技術使得AWT能提供給應用程序獨立於機器平台的接口這保證了同一程序的GUI在不同機器上運行具有類似的外觀(不一定完全一致)

    抽象窗口工具包AWT (Abstract Window Toolkit) 是 API為Java 程序提供的建立圖形用戶界面GUI (Graphics User Interface)工具集AWT可用於Java的applet和applications中它支持圖形用戶界面編程的功能包括 用戶界面組件事件處理模型圖形和圖像工具包括形狀顏色和字體類布局管理器可以進行靈活的窗口布局而與特定窗口的尺寸和屏幕分辨率無關數據傳送類可以通過本地平台的剪貼板來進行剪切和粘貼

    然而Java推出的時候AWT作為Java最弱的組件受到不小的批評最根本的缺點是AWT在原生的用戶界面之上僅提供了一個非常薄的抽象層例如生成一個AWT的復選框會導致AWT直接調用下層原生例程來生成一個復選框不幸的是一個Windows平台上的復選框同MacOS平台或者各種UNIX風格平台上的復選框並不是那麼相同這種糟糕的設計選擇使得那些擁護Java一次編寫到處運行 (write once run anywhere)信條的程序員們過得並不舒暢因為AWT並不能保證他們的應用在各種平台上表現得有多相似一個AWT應用可能在Windows上表現很好可是到了Macintosh上幾乎不能使用或者正好相反年代程序員中流傳著一個笑話:Java的真正信條是一次編寫到處測試 (write once test everywhere)導致這種糟糕局面的一個可能原因據說是AWT從概念產生到完成實現只用了一個月

    在第二版的Java開發包中AWT的器件很大程度上被Swing工具包替代Swing通過自己繪制器件而避免了AWT的種種弊端Swing調用本地圖形子系統中的底層例程而不是依賴操作系統的高層用戶界面模塊Swing的出現宣告了AWT的窮途末路目前幾乎看不到AWT在GUI上的應用了

   Swing——想說愛你不容易
    Java Swing是Java Foundation Classes(JFC)的一部分它是試圖解決AWT缺點的一個嘗試從這一點上來說Swing可以說是站在前人(以AWT的表現實在很難稱之為巨人)的肩膀上了SWING解決了AWT的很多缺點相對於AWT Swing是輕量級元件SWING 提供許多比AWT更好的屏幕顯示元素它們用純Java寫成所以同Java本身一樣可以跨平台運行這一點不像AWT 它們是JFC的一部分 它們支持可更換的觀感和主題(各種操作系統默認的特有主題)然而Swing不是真的使用原生平台提供的設備而是僅僅在表面上模仿它們這意味著你可以在任意平台上使用JAVA支持的任意觀感 輕量級元件的缺點則是執行速度較慢優點就是可以在所有平台上采用統一的行為

    在Swing 中Sun 開發了一個經過仔細設計的靈活而強大的 GUI 工具包其中大量應用了MVC模式這大大增加了Swing的靈活性筆者曾經做過一個大型的大型C/M/S(Client/Middleware/Server)項目其中客戶端UI采用的就是Swing可以說Swing幾乎可以實現所有的你能夠想到效果只要你技術足夠精湛都可以實現這也許在某些高手看來是Swing一個很明顯的優勢然而Swing的這種設計確苦了Java的初學者或者面向對象程序設計造詣不深的程序員靈活就意味這功能強大功能強大就意味著復雜對於一般的程序員來說Swing太復雜了以至於他們在還不了解Swing的時候就已經放棄了選擇Swing或者失去淨下心來繼續學下去的毅力最後寫出來的只能是一堆垃圾代碼

    如果說功能強大但是過於復雜會讓人對Swing想愛確不知道怎麼去愛的話那麼Swing的低效則會讓大多數的程序員感歎——Swing想說愛你不容易由於Swing是輕量級組件因此Swing中的每一個組件都是采用Java身的畫點畫線的函數畫出來的並沒有調用操作系統組件Java字節碼的運行速度大概是同等條件下C/C++語言程序運行速度的//於是采用JBuilder進行開發的朋友們經常可以看到JBuilder灰屏(窗體上組件還沒有畫出來)的景象正是因為Swing的蝸牛速度因此在Java推出這麼多年來很少能夠看見比較成熟的Swing桌面應用(JBuilder算是其中最成功的一個了但是現在隨著Eclipse的崛起JBuilder的發展也是舉步維艱)

    總之Swing在AWT的基礎上很好的解決了跨平台觀感不一的問題並且提供了比AWT更為豐富的組件(AWT連樹形控件表格控件都沒有)和強大的功能卻因為其過於復雜難以上手和讓人無法接受的速度讓廣大程序員對其失去了好感這不能不讓人惋惜

   SWT/JFace——眾裡尋她千百度
    就在Java在中間件市場(JEE)以及web應用(JSP/Sevlet)上大放異彩的時候AWT的窮途末路Swing的飽受病诟這一切似乎讓Java的GUI開發沉寂的像一潭死水
尋尋覓覓冷冷清清淒淒慘慘戚戚啊!
SWT/JFace象一股清新的風吹入了Java的GUI開發領域為這個沉悶的領域帶來了勃勃生機雖然SUN不接納SWT/JFace作為Java中的一種圖形API標准但它雖然借著Eclipse的優異表現以不可阻擋之勢向前發展著終於可以用SWT/JFace輕松的開發出高效率的GUI程序且擁有標准的Windows外觀Eclipse軟件就是基於SWT/JFace構建的大家看看Eclipse就知道SWT有多麼的棒

  
SWT/JFace的代表作——Eclipse界面

  在此有必要解釋一下SWT與JFace的區別JFace其實是在SWT的基礎上采用MVC模式進行了封裝而形成的一個新的類庫這一封裝大大簡化了采用SWT開發Java圖形用戶界面的難度在SWT推出後不久出現了一個名為SWT Designer的Eclipse插件使用該插件可以像采用Visual Studio NET開發Window圖形用戶界面一樣簡單可以采用可視化拖拽的方式進行不要以為這是一個很小的進步要知道用Java寫GUI程序能夠簡單到這種程度這在以前可是想都不敢想的事情NET平台之所以成功很大程度上與它的IDE——Visual Studio NET優異的表現有關而Visual Studio NET最值得稱道的就是它的可視化設計模式

    SWT/JFace直接調用了操作系統的圖形庫從而使得Java應用程序的Look & Feel 與操作系統的習慣完全一致更為重要的是SWT/JFace采用有限調用本地方法(控件)只有當本地找不到所需要的控件時才進行模擬對本地方法的直接調用大幅度的提高了基於SWT/JFace的Java應用程序的運行速度相信使用過JBuilder和Eclipse的開發人員會有切身的體會一般來說基於Swing的JBuilder需運行在G以上內存的機器上而Eclipse則可以在M內存的機器上跑的很歡SWT/JFace具有比AWT更為豐富的控件比Swing更為快捷的速度
任何事務都不可能十全十美SWT/JFace也不例外SWT/JFace的缺點主要在於兩點() 不是Java語言標准() 某些平台並不支持

總結——長江後浪推前浪
    滾滾長江東逝水Java GUI開發三劍客先後登上了歷史的舞台AWT作為Java第一個GUI類庫實現Java GUI開發從無到有的突破盡管後來表現不佳目前已經基本退出歷史的舞台但是其歷史功績是不容被抹殺的Swing系出名門是Java標准的一部分並且站在AWT的肩膀上進行了許多改進但是其過於復雜且效率低下目前也是飽受病诟並不被廣大程序員所接受SWT/JFace作為後起之秀在效率上易用性上以及美觀上都進行了改進可以說是這三劍客中表現最為優秀的最為難能可貴的是SWT/JFace並不是Java標准的一部分卻能被廣大程序員所接受足見其優秀

    Java GUI開發作為Java技術系列中最為薄弱的環節距離Windows平台的NET GUI開發還是有很大的差距但是相信在類似Java GUI開發三劍客這樣的新技術的推動下總有一天Java GUI開發還是可以接近或者達到Windows平台的NET GUI開發的水平


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28231.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.