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