簡析組件AWT和Swing各有的優(yōu)缺點及區(qū)別

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)和輕量級組件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,423評論 0 2
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,220評論 0 4
  • 到目前為止,我們在Java中編寫的基本都是基于控制臺的程序;而Java編程語言之所以如此流行的一個主要原因之一,就...
    全棧JAVA筆記閱讀 2,343評論 2 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • 簡單粗暴的方式建立了一個結(jié)點值依次為1,2,3,4,6,7 的滿二叉樹,方便驗證關(guān)于二叉樹的算法。
    寫代碼不如跳舞閱讀 319評論 0 0

友情鏈接更多精彩內(nèi)容