AWT
AWT是Abstract Window Toolkit(抽象窗口工具包)的縮寫,是SUN專門針對Java GUI編程提供的最早的也是最初的開發(fā)工具包,用來建立和設(shè)置Java圖形用戶界面,這個工具包提供了一套與本地圖形界面交互的接口。AWT 中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對應(yīng)的關(guān)系(peers)。也就是說,當(dāng)我們利用 AWT 來構(gòu)件圖形用戶界面的時候,實際上是在利用操作系統(tǒng)所提供的圖形庫。不過由于不同操作系統(tǒng)的圖形庫所提供的功能是不完全一樣,所以在一個平臺上存在的功能在另外一個平臺上則可能不存在。這就導(dǎo)致一些應(yīng)用程序在測試時界面非常美觀,而一旦移植到其他的操作系統(tǒng)平臺上后就可能變得“慘不忍睹”。為了實現(xiàn)Java語言"一次編譯,到處運行",AWT 不得不通過犧牲功能來實現(xiàn)其平臺無關(guān)性,其所提供的圖形功能被定格為各種通用型操作系統(tǒng)所提供的圖形功能的交集。由于AWT 是依靠本地方法來實現(xiàn)其功能的,所以通常把AWT組件稱為重量級組件。
AWT是Sun不推薦使用的工具集。然而它在許多非桌面環(huán)境如移動或嵌入式設(shè)備中有著自己的優(yōu)勢:
1.更少的內(nèi)存:對運行在有限環(huán)境中的GUI程序的開發(fā),是合適的。
2.更少的啟動事件:由于AWT組件是本地由操作系統(tǒng)實現(xiàn)的。絕大多數(shù)的二進(jìn)制代碼已經(jīng)在如系統(tǒng)啟動的時候被預(yù)裝載了,這降低了它的啟動事件。
3.更好的響應(yīng):由于本地組件由操作系統(tǒng)渲染。
4.成熟穩(wěn)定的:能夠正常工作并很少使你的程序崩潰。
然而事物具有兩面性,AWT也有著許多缺點:
1.更少組件類型:表和樹這些重要的組件缺失了。它們是桌面應(yīng)用程序中普遍使用的。
2.缺乏豐富的組件特征:按鈕不支持圖片。
3.無擴展性:AWT的組件是本地組件。JVM中的AWT類實例實際只是包含本地組件的引用。唯一的擴展點是AWT的Canvas組件,可以從零開始創(chuàng)建自定義組件。然而無法繼承和重用一個已有的AWT組件
Swing
Swing 是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面系統(tǒng),是JFC(Java Foundation Class)的一部分,是試圖解決AWT缺點的一個嘗試。它提供了AWT 所能夠提供的所有功能,并且用純粹的Java代碼對AWT 的功能進(jìn)行了大幅度的擴充。所有的swing組件實際上也是AWT的一部分。Swing 對基于對等體的組件使用的術(shù)語是重量級,對于模擬的組件使用的術(shù)語是輕量級。實際上,Swing 可以支持在一個 GUI 中混合使用重量級組件和輕量級組件,不過一般將其稱之為輕量級組件。
Swing是三者中最強大的GUI工具集,同時它也是SUN推薦使用的GUI工具集,通過幾個本版的修改和擴展后,現(xiàn)在的swing在某些領(lǐng)域有著明顯優(yōu)勢:
1.豐富的組件類型:Swing提供了非常廣泛的標(biāo)準(zhǔn)組件。這些組件和SWT一樣豐富?;谒己玫目蓴U展性,除了標(biāo)準(zhǔn)組件,Swing還提供了大量的第三方組件。許多商業(yè)或開源的Swing組件庫在開發(fā)多年后都已經(jīng)可以方便地獲取了。
2.豐富的組件特性:Swing不僅包含了所有平臺上的特性,它還支持根據(jù)程序所運行的平臺來添加額外特性。Swing組件特性遵循特定原則,易于擴展,因此能夠提供較SWT和AWT更多的功能。
3.好的組件API模型支持:Swing遵循MVC模式,這是一種非常成功的設(shè)計模式。它的API成熟并設(shè)計良好。經(jīng)過多年的演化,Swing組件APIs變得越來越強大,靈活和可擴展。它的API設(shè)計被認(rèn)為是最成功的GUI API之一。較之SWT和AWT更面向?qū)ο?,也更靈活而可擴展。
4.標(biāo)準(zhǔn)的GUI庫:Swing和AWT一樣是JRE中的標(biāo)準(zhǔn)庫。因此,你不用單獨地將它們隨你的應(yīng)用程序一起分發(fā)。它們是平臺無關(guān)的,不用擔(dān)心平臺兼容性。
5.成熟穩(wěn)定:由于它是純Java實現(xiàn)的,不會有SWT的兼容性問題。Swing在每個平臺上都有相同的性能,不會有明顯的性能差異。
6.可擴展和靈活性。Swing完全由Java代碼實現(xiàn)。Swing基于MVC的結(jié)構(gòu)使得它可以發(fā)揮Java作為一門面向?qū)ο笳Z言的優(yōu)勢。它提供了許總體上良好的性能。
當(dāng)然,swing也有著許多不足之處:比如swing比AWT和SWT更多的內(nèi)存消耗。Swing自己實現(xiàn)了所有組件。因此,它在運行時裝載了大量的類。而在運行時Java在堆上創(chuàng)建小的對象導(dǎo)致了額外的堆空間消耗。而許多小的對象難以有效地被垃圾回收機制回收。因此,Swing應(yīng)用程序通常會因無法及時回收冗余的對象而導(dǎo)致性能下降。
AWT組件與Swing組件有什么區(qū)別?
Swing是AWT的擴展,它提供了許多新的圖形界面組件。Swing組件以“J”開頭,除了擁有與AWT類似的按鈕(JButton)、標(biāo)簽(JLabel)、復(fù)選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個豐富的高層組件集合,如表格(JTable)、樹(JTree)。在javax.swing包中,定義了兩種類型的組件:頂層容器(Jframe、Japplet、JDialog和JWindow)和輕量級組件。