Java GUI編程中AWT/swing/SWT的優缺點


http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html

 

AWT

  AWT是Abstract Window Toolkit(抽象窗口工具包)的縮寫,是SUN專門針對Java GUI編程提供的最早的也是最初的開發工具包,用來建立和設置Java圖形用戶界面,這個工具包提供了一套與本地圖形界面交互的接口。AWT 中的圖形函數與操作系統所提供的圖形函數之間有着一一對應的關系(peers)。也就是說,當我們利用 AWT 來構件圖形用戶界面的時候,實際上是在利用操作系統所提供的圖形庫。不過由於不同操作系統的圖形庫所提供的功能是不完全一樣,所以在一個平台上存在的功能在另外一個平台上則可能不存在。這就導致一些應用程序在測試時界面非常美觀,而一旦移植到其他的操作系統平台上后就可能變得“慘不忍睹”。為了實現Java語言"一次編譯,到處運行",AWT 不得不通過犧牲功能來實現其平台無關性,其所提供的圖形功能被定格為各種通用型操作系統所提供的圖形功能的交集。由於AWT 是依靠本地方法來實現其功能的,所以通常把AWT組件稱為重量級組件。

  AWT是Sun不推薦使用的工具集。然而它在許多非桌面環境如移動或嵌入式設備中有着自己的優勢:

1.更少的內存:對運行在有限環境中的GUI程序的開發,是合適的。

2.更少的啟動事件:由於AWT組件是本地由操作系統實現的。絕大多數的二進制代碼已經在如系統啟動的時候被預裝載了,這降低了它的啟動事件。

3.更好的響應:由於本地組件由操作系統渲染。

4.成熟穩定的:能夠正常工作並很少使你的程序崩潰。

然而事物具有兩面性,AWT也有着許多缺點:

1.更少組件類型:表和樹這些重要的組件缺失了。它們是桌面應用程序中普遍使用的。

2.缺乏豐富的組件特征:按鈕不支持圖片。

3.無擴展性:AWT的組件是本地組件。JVM中的AWT類實例實際只是包含本地組件的引用。唯一的擴展點是AWT的Canvas組件,可以從零開始創建自定義組件。然而無法繼承和重用一個已有的AWT組件

Swing

  Swing 是在AWT的基礎上構建的一套新的圖形界面系統,是JFC(Java Foundation Class)的一部分,是試圖解決AWT缺點的一個嘗試。它提供了AWT 所能夠提供的所有功能,並且用純粹的Java代碼對AWT 的功能進行了大幅度的擴充。所有的swing組件實際上也是AWT的一部分。Swing 對基於對等體的組件使用的術語是重量級,對於模擬的組件使用的術語是輕量級。實際上,Swing 可以支持在一個 GUI 中混合使用重量級組件和輕量級組件,不過一般將其稱之為輕量級組件。

     Swing是三者中最強大的GUI工具集,同時它也是SUN推薦使用的GUI工具集,通過幾個本版的修改和擴展后,現在的swing在某些領域有着明顯優勢:

1.豐富的組件類型:Swing提供了非常廣泛的標准組件。這些組件和SWT一樣豐富。基於它良好的可擴展性,除了標准組件,Swing還提供了大量的第三方組件。許多商業或開源的Swing組件庫在開發多年后都已經可以方便地獲取了。

2.豐富的組件特性:Swing不僅包含了所有平台上的特性,它還支持根據程序所運行的平台來添加額外特性。Swing組件特性遵循特定原則,易於擴展,因此能夠提供較SWT和AWT更多的功能。

3.好的組件API模型支持:Swing遵循MVC模式,這是一種非常成功的設計模式。它的API成熟並設計良好。經過多年的演化,Swing組件APIs變得越來越強大,靈活和可擴展。它的API設計被認為是最成功的GUI API之一。較之SWT和AWT更面向對象,也更靈活而可擴展。

4.標准的GUI庫:Swing和AWT一樣是JRE中的標准庫。因此,你不用單獨地將它們隨你的應用程序一起分發。它們是平台無關的,不用擔心平台兼容性。

5.成熟穩定:由於它是純Java實現的,不會有SWT的兼容性問題。Swing在每個平台上都有相同的性能,不會有明顯的性能差異。

6.可擴展和靈活性。Swing完全由Java代碼實現。Swing基於MVC的結構使得它可以發揮Java作為一門面向對象語言的優勢。它提供了許總體上良好的性能。

  當然,swing也有着許多不足之處:比如swing比AWT和SWT更多的內存消耗。Swing自己實現了所有組件。因此,它在運行時裝載了大量的類。而在運行時Java在堆上創建小的對象導致了額外的堆空間消耗。而許多小的對象難以有效地被垃圾回收機制回收。因此,Swing應用程序通常會因無法及時回收冗余的對象而導致性能下降。

SWT

  SWT是Standard WidgetToolkit的縮寫,是由IBM構建的一個新的GUI庫,其目的在於嘗試徹底解決AWT和swing帶來的諸多問題,提供比AWT更為豐富的組件集。SWT和swing一樣痛Java代碼模擬了一些平台缺失的組件,不過與 AWT 的概念相比,SWT 是一個低級的 GUI 工具包,在構建SWT的過程中,構建者從 AWT 和 Swing 實現中學習了很多經驗,他們試圖構建一個集二者優點於一體而沒有二者的缺點的系統。因此SWT可以說是AWT與swing的融合體。

  SWT有如下優勢:

1.豐富的組件類型:SWT提供了種類繁多的組件,從基礎組件如按鈕和標簽到高級的表格和樹。

2.相對的豐富組件特性:盡管SWT也遵循最大公倍數原則,它采用模擬的方式重新設計了對更多組件特性的支持。所以同AWT相比,它有着相對豐富的組件特性。

3.更快的響應時間:基於和AWT同樣的原因,SWT組件包裝了本地組件,由操作系統實現渲染。操作系統通常對渲染處理做了優化,保存GUI二進制代碼為標准庫,減少了內存的使用,提高了響應性能。

4.更少的內存消耗。

不足之處:

1.不在JRE的標准庫中。因此必須將它和程序捆綁在一起,並為所要支持的每個操作系統創建單獨的安裝程序。

2.不夠成熟和穩定。SWT因其設計上的一些缺陷,如資源管理,Windows友好等,被認為是不穩定的。它可以在Windows上表現得很好,但在其他操作系統上,它經常是不穩定且容易崩潰的。這很大程度上是因為它把資源管理交給開發者來處理,而並不是所有的開發人員能夠正確地處理這些。

3.在非Windows平台下的性能不高4.無Look AndFeel 支持。和AWT同樣的原因。

4.不可擴展。

  綜上所述,在對GUI編程時的工具包選擇得根據具體項目決定:若是需要用低內存來運行GUI程序,使用AWT會是一個不錯的選擇,而如果只考慮平台的移植性可優先考慮SWT/swing


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM