Swing組件也是AWT的一部分
Java Swing 是 Java Foundation Classes(JFC)的一部分,它是試圖解決 AWT 缺點(diǎn)的一個(gè)嘗試。在 Swing 中,Sun 開發(fā)了一個(gè)經(jīng)過仔細(xì)設(shè)計(jì)的、靈活而強(qiáng)大的 GUI 工具包。不幸的是,這意味著我們又要花一些時(shí)間來學(xué)習(xí) Swing 了,對于常見的情況來說,Swing 有些太復(fù)雜了。
Swing 是在 AWT 組件基礎(chǔ)上構(gòu)建的。所有 Swing組件實(shí)際上也是 AWT 的一部分。Swing 使用了 AWT 的事件模型和支持類,例如 Colors、Images 和 Graphics。Swing組件、布局管理器以及事件。正如您可以看到的一樣,這些組件集比 AWT 提供的組件集更為廣泛,與 SWT 組件集相比也毫不遜色。
為了克服在不同主機(jī)上行為也會(huì)不同的缺點(diǎn),Swing 將對主機(jī)控件的依賴性降至了最低。實(shí)際上,Swing 只為諸如窗口和框架之類的頂層 組件使用對等體。大部分組件(JComponent 及其子類)都是使用純 Java 代碼來模擬的。這意味著 Swing 天生就可以在所有主機(jī)之間很好地進(jìn)行移植。因此,Swing 通??雌饋聿⒉幌袷潜镜爻绦?。實(shí)際上,它有很多外觀,有些模擬(盡管通常并不精確)不同主機(jī)的外觀,有些則提供了獨(dú)特的外觀。
Swing 對基于對等體的組件使用的術(shù)語是重量級(jí)(heavyweight),對于模擬的組件使用的術(shù)語是輕量級(jí)(lightweight)。實(shí)際上,Swing 可以支持在一個(gè) GUI 中混合使用重量級(jí)組件和輕量級(jí)組件,例如在一個(gè) JContainer 中混合使用 AWT 和 Swing 控件,但是如果組件產(chǎn)生了重疊,就必須注意繪制這些控件的順序。
Swing 無法充分利用硬件 GUI 加速器和專用主機(jī) GUI 操作的優(yōu)點(diǎn)。結(jié)果是 Swing 應(yīng)用程序可能比本地 GUI 的程序運(yùn)行速度都慢。Sun 花費(fèi)了大量的精力來改進(jìn)最近版本的 Swing (Java V1.4 和 1.5)的性能,這種缺點(diǎn)正在變得日益微弱。由于 Swing 的設(shè)計(jì)更加健壯,因此其代碼基礎(chǔ)也更堅(jiān)實(shí)。這意味著它可以在一臺(tái)健壯的機(jī)器上比 AWT 和 SWT 上運(yùn)行得更好。
除了具有更多的組件、布局管理器和事件之外,Swing 還有很多特性使得自己比 AWT 的功能更加強(qiáng)大。下面是更為重要的幾個(gè)特性:
模型與視圖和控件分離
對于這個(gè)模型中的所有組件來說,模型都是與組件分離的。這樣可以根據(jù)應(yīng)用程序的需求來采用模型,并在多個(gè)視圖之間進(jìn)行共享。為了方便起見,每個(gè)組件類型都提供有默認(rèn)的模型。
可編程外觀
每個(gè)組件的外觀(外表以及如何處理輸入事件)都是由一個(gè)單獨(dú)的、可動(dòng)態(tài)替換的實(shí)現(xiàn)來進(jìn)行控制的。這樣我們就可以改變基于 Swing 的 GUI 的部分或全部外觀。
呈現(xiàn)器和編輯器
大部分顯示模型內(nèi)容的組件,例如列表、表和樹,都可以處理幾乎所有類型的模型元素。這可以通過為每種組件類型和模型類型映射一個(gè)渲染器或編輯器來實(shí)現(xiàn)。例如,一個(gè)具有包含 java.util.Date 值的列的表可以有一些專用的代碼來呈現(xiàn)數(shù)據(jù)值和編輯數(shù)據(jù)值。每一列都可以有不同的類型。以上是Swing組件也是AWT的一部分。
【編輯推薦】