AWT
AWT是Abstract Window Toolkit(抽象窗口工具包)的縮寫,是SUN專門針對Java GUI編程提供的最先的也是最初的開發工具包,用來創建和設置Java圖形用戶界面,這個工具包提供了一套與本地圖形界面交互的接口。AWT 中的圖形函數與操做系統所提供的圖形函數之間有着一一對應的關係(peers)。也就是說,當咱們利用 AWT 來構件圖形用戶界面的時候,其實是在利用操做系統所提供的圖形庫。不過因爲不一樣操做系統的圖形庫所提供的功能是不徹底同樣,因此在一個平臺上存在的功能在另一個平臺上則可能不存在。這就致使一些應用程序在測試時界面很是美觀,而一旦移植到其餘的操做系統平臺上後就可能變得「慘不忍睹」。爲了實現Java語言"一次編譯,處處運行",AWT 不得不經過犧牲功能來實現其平臺無關性,其所提供的圖形功能被定格爲各類通用型操做系統所提供的圖形功能的交集。因爲AWT 是依靠本地方法來實現其功能的,因此一般把AWT組件稱爲重量級組件。
AWT是Sun不推薦使用的工具集。然而它在許多非桌面環境如移動或嵌入式設備中有着本身的優點:
1.更少的內存:對運行在有限環境中的GUI程序的開發,是合適的。
2.更少的啓動事件:因爲AWT組件是本地由操做系統實現的。絕大多數的二進制代碼已經在如系統啓動的時候被預裝載了,這下降了它的啓動事件。
3.更好的響應:因爲本地組件由操做系統渲染。
4.成熟穩定的:可以正常工做並不多使你的程序崩潰。
然而事物具備兩面性,AWT也有着許多缺點:
1.更少組件類型:表和樹這些重要的組件缺失了。它們是桌面應用程序中廣泛使用的。
2.缺少豐富的組件特徵:按鈕不支持圖片。
3.無擴展性:AWT的組件是本地組件。JVM中的AWT類實例實際只是包含本地組件的引用。惟一的擴展點是AWT的Canvas組件,能夠從零開始建立自定義組件。然而沒法繼承和重用一個已有的AWT組件java
Swing
Swing 是在AWT的基礎上構建的一套新的圖形界面系統,是JFC(Java Foundation Class)的一部分,是試圖解決AWT缺點的一個嘗試。它提供了AWT 所可以提供的全部功能,而且用純粹的Java代碼對AWT 的功能進行了大幅度的擴充。全部的swing組件實際上也是AWT的一部分。Swing 對基於對等體的組件使用的術語是重量級,對於模擬的組件使用的術語是輕量級。實際上,Swing 能夠支持在一個 GUI 中混合使用重量級組件和輕量級組件,不過通常將其稱之爲輕量級組件。
Swing是三者中最強大的GUI工具集,同時它也是SUN推薦使用的GUI工具集,經過幾個本版的修改和擴展後,如今的swing在某些領域有着明顯優點:
1.豐富的組件類型:Swing提供了很是普遍的標準組件。這些組件和SWT同樣豐富。基於它良好的可擴展性,除了標準組件,Swing還提供了大量的第三方組件。許多商業或開源的Swing組件庫在開發多年後都已經能夠方便地獲取了。
2.豐富的組件特性:Swing不只包含了全部平臺上的特性,它還支持根據程序所運行的平臺來添加額外特性。Swing組件特性遵循特定原則,易於擴展,所以可以提供較SWT和AWT更多的功能。
3.好的組件API模型支持:Swing遵循MVC模式,這是一種很是成功的設計模式。它的API成熟並設計良好。通過多年的演化,Swing組件APIs變得愈來愈強大,靈活和可擴展。它的API設計被認爲是最成功的GUI API之一。較之SWT和AWT更面向對象,也更靈活而可擴展。
4.標準的GUI庫:Swing和AWT同樣是JRE中的標準庫。所以,你不用單獨地將它們隨你的應用程序一塊兒分發。它們是平臺無關的,不用擔憂平臺兼容性。
5.成熟穩定:因爲它是純Java實現的,不會有SWT的兼容性問題。Swing在每一個平臺上都有相同的性能,不會有明顯的性能差別。
6.可擴展和靈活性。Swing徹底由Java代碼實現。Swing基於MVC的結構使得它能夠發揮Java做爲一門面向對象語言的優點。它提供了許整體上良好的性能。
固然,swing也有着許多不足之處:好比swing比AWT和SWT更多的內存消耗。Swing本身實現了全部組件。所以,它在運行時裝載了大量的類。而在運行時Java在堆上建立小的對象致使了額外的堆空間消耗。而許多小的對象難以有效地被垃圾回收機制回收。所以,Swing應用程序一般會因沒法及時回收冗餘的對象而致使性能降低。編程
AWT組件與Swing組件有什麼區別?
Swing是AWT的擴展,它提供了許多新的圖形界面組件。Swing組件以「J」開頭,除了擁有與AWT相似的按鈕(JButton)、標籤(JLabel)、複選框(JCheckBox)、菜單(JMenu)等基本組件外,還增長了一個豐富的高層組件集合,如表格(JTable)、樹(JTree)。在javax.swing包中,定義了兩種類型的組件:頂層容器(Jframe、Japplet、JDialog和JWindow)和輕量級組件。
設計模式