為什么一提到j(luò)ava的swing和awt組件,大家都不建議學(xué)?,這兩個(gè)的劣勢(shì)是啥?

AWT

AWT是Abstract Window Toolkit(抽象窗口工具包)的縮寫(xiě),是SUN專(zhuān)門(mén)針對(duì)Java GUI編程提供的最早的也是最初的開(kāi)發(fā)工具包,用來(lái)建立和設(shè)置Java圖形用戶界面,這個(gè)工具包提供了一套與本地圖形界面交互的接口。AWT 中的圖形函數(shù)與操作系統(tǒng)所提供的圖形函數(shù)之間有著一一對(duì)應(yīng)的關(guān)系(peers)。也就是說(shuō),當(dāng)我們利用 AWT 來(lái)構(gòu)件圖形用戶界面的時(shí)候,實(shí)際上是在利用操作系統(tǒng)所提供的圖形庫(kù)。不過(guò)由于不同操作系統(tǒng)的圖形庫(kù)所提供的功能是不完全一樣,所以在一個(gè)平臺(tái)上存在的功能在另外一個(gè)平臺(tái)上則可能不存在。這就導(dǎo)致一些應(yīng)用程序在測(cè)試時(shí)界面非常美觀,而一旦移植到其他的操作系統(tǒng)平臺(tái)上后就可能變得“慘不忍睹”。為了實(shí)現(xiàn)Java語(yǔ)言"一次編譯,到處運(yùn)行",AWT 不得不通過(guò)犧牲功能來(lái)實(shí)現(xiàn)其平臺(tái)無(wú)關(guān)性,其所提供的圖形功能被定格為各種通用型操作系統(tǒng)所提供的圖形功能的交集。由于AWT 是依靠本地方法來(lái)實(shí)現(xiàn)其功能的,所以通常把AWT組件稱(chēng)為重量級(jí)組件。

進(jìn)群:697699179可以獲取Java各類(lèi)入門(mén)學(xué)習(xí)資料!

這是我的微信公眾號(hào)【編程study】各位大佬有空可以關(guān)注下,每天更新Java學(xué)習(xí)方法,感謝!

學(xué)習(xí)中遇到問(wèn)題有不明白的地方,推薦加小編Java學(xué)習(xí)群:697699179內(nèi)有視頻教程 ,直播課程 ,等學(xué)習(xí)資料,期待你的加入

AWT是Sun不推薦使用的工具集。然而它在許多非桌面環(huán)境如移動(dòng)或嵌入式設(shè)備中有著自己的優(yōu)勢(shì):

1.更少的內(nèi)存:對(duì)運(yùn)行在有限環(huán)境中的GUI程序的開(kāi)發(fā),是合適的。

2.更少的啟動(dòng)事件:由于AWT組件是本地由操作系統(tǒng)實(shí)現(xiàn)的。絕大多數(shù)的二進(jìn)制代碼已經(jīng)在如系統(tǒng)啟動(dòng)的時(shí)候被預(yù)裝載了,這降低了它的啟動(dòng)事件。

3.更好的響應(yīng):由于本地組件由操作系統(tǒng)渲染。

4.成熟穩(wěn)定的:能夠正常工作并很少使你的程序崩潰。

然而事物具有兩面性,AWT也有著許多缺點(diǎn):

1.更少組件類(lèi)型:表和樹(shù)這些重要的組件缺失了。它們是桌面應(yīng)用程序中普遍使用的。

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

3.無(wú)擴(kuò)展性:AWT的組件是本地組件。JVM中的AWT類(lèi)實(shí)例實(shí)際只是包含本地組件的引用。唯一的擴(kuò)展點(diǎn)是AWT的Canvas組件,可以從零開(kāi)始創(chuàng)建自定義組件。然而無(wú)法繼承和重用一個(gè)已有的AWT組件

Swing

  Swing 是在AWT的基礎(chǔ)上構(gòu)建的一套新的圖形界面系統(tǒng),是JFC(Java Foundation Class)的一部分,是試圖解決AWT缺點(diǎn)的一個(gè)嘗試。它提供了AWT 所能夠提供的所有功能,并且用純粹的Java代碼對(duì)AWT 的功能進(jìn)行了大幅度的擴(kuò)充。所有的swing組件實(shí)際上也是AWT的一部分。Swing 對(duì)基于對(duì)等體的組件使用的術(shù)語(yǔ)是重量級(jí),對(duì)于模擬的組件使用的術(shù)語(yǔ)是輕量級(jí)。實(shí)際上,Swing 可以支持在一個(gè) GUI 中混合使用重量級(jí)組件和輕量級(jí)組件,不過(guò)一般將其稱(chēng)之為輕量級(jí)組件。

? ? Swing是三者中最強(qiáng)大的GUI工具集,同時(shí)它也是SUN推薦使用的GUI工具集,通過(guò)幾個(gè)本版的修改和擴(kuò)展后,現(xiàn)在的swing在某些領(lǐng)域有著明顯優(yōu)勢(shì):

1.豐富的組件類(lèi)型:Swing提供了非常廣泛的標(biāo)準(zhǔn)組件。這些組件和SWT一樣豐富?;谒己玫目蓴U(kuò)展性,除了標(biāo)準(zhǔn)組件,Swing還提供了大量的第三方組件。許多商業(yè)或開(kāi)源的Swing組件庫(kù)在開(kāi)發(fā)多年后都已經(jīng)可以方便地獲取了。

2.豐富的組件特性:Swing不僅包含了所有平臺(tái)上的特性,它還支持根據(jù)程序所運(yùn)行的平臺(tái)來(lái)添加額外特性。Swing組件特性遵循特定原則,易于擴(kuò)展,因此能夠提供較SWT和AWT更多的功能。

3.好的組件API模型支持:Swing遵循MVC模式,這是一種非常成功的設(shè)計(jì)模式。它的API成熟并設(shè)計(jì)良好。經(jīng)過(guò)多年的演化,Swing組件APIs變得越來(lái)越強(qiáng)大,靈活和可擴(kuò)展。它的API設(shè)計(jì)被認(rèn)為是最成功的GUI API之一。較之SWT和AWT更面向?qū)ο?,也更靈活而可擴(kuò)展。

4.標(biāo)準(zhǔn)的GUI庫(kù):Swing和AWT一樣是JRE中的標(biāo)準(zhǔn)庫(kù)。因此,你不用單獨(dú)地將它們隨你的應(yīng)用程序一起分發(fā)。它們是平臺(tái)無(wú)關(guān)的,不用擔(dān)心平臺(tái)兼容性。

5.成熟穩(wěn)定:由于它是純Java實(shí)現(xiàn)的,不會(huì)有SWT的兼容性問(wèn)題。Swing在每個(gè)平臺(tái)上都有相同的性能,不會(huì)有明顯的性能差異。

6.可擴(kuò)展和靈活性。Swing完全由Java代碼實(shí)現(xiàn)。Swing基于MVC的結(jié)構(gòu)使得它可以發(fā)揮Java作為一門(mén)面向?qū)ο笳Z(yǔ)言的優(yōu)勢(shì)。它提供了許總體上良好的性能。

  當(dāng)然,swing也有著許多不足之處:比如swing比AWT和SWT更多的內(nèi)存消耗。Swing自己實(shí)現(xiàn)了所有組件。因此,它在運(yùn)行時(shí)裝載了大量的類(lèi)。而在運(yùn)行時(shí)Java在堆上創(chuàng)建小的對(duì)象導(dǎo)致了額外的堆空間消耗。而許多小的對(duì)象難以有效地被垃圾回收機(jī)制回收。因此,Swing應(yīng)用程序通常會(huì)因無(wú)法及時(shí)回收冗余的對(duì)象而導(dǎo)致性能下降。

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

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

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