標籤:

簡析組件AWT和Swing各有的優缺點及區別

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應用程序通常會因無法及時回收冗餘的對象而導致性能下降。

AWT組件與Swing組件有什麼區別?

Swing是AWT的擴展,它提供了許多新的圖形界面組件。Swing組件以「J」開頭,除了擁有與AWT類似的按鈕(JButton)、標籤(JLabel)、複選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個豐富的高層組件集合,如表格(JTable)、樹(JTree)。在javax.swing包中,定義了兩種類型的組件:頂層容器(Jframe、Japplet、JDialog和JWindow)和輕量級組件。


推薦閱讀:

工廠模式、工廠方法模式和抽象工廠模式的差異分析

TAG:自學編程 |