AWT和Swing都是java中的包。
AWT(Abstract Window Toolkit):抽象窗口工具包,早期編寫圖形界面應(yīng)用程序的包。 Swing :為解決 AWT 存在的問題而新開發(fā)的圖形界面包。Swing是對AWT的改良和擴(kuò)展。
AWT和Swing的實現(xiàn)原理不同: AWT的圖形函數(shù)與操作系統(tǒng)提供的圖形函數(shù)有著一一對應(yīng)的關(guān)系。也就是說,當(dāng)我們利用 AWT構(gòu)件圖形用戶界面的時候,實際上是在利用操作系統(tǒng)的圖形庫。 不同的操作系統(tǒng)其圖形庫的功能可能不一樣,在一個平臺上存在的功能在另外一個平臺上則可能不存在。為了實現(xiàn)Java語言所宣稱的"一次編譯,到處運行"的概念,AWT不得不通過犧牲功能來實現(xiàn)平臺無關(guān)性。因此,AWT 的圖形功能是各操作系統(tǒng)圖形功能的“交集”。 因為AWT是依靠本地方法來實現(xiàn)功能的,所以AWT控件稱為“重量級控件”。
而Swing ,不僅提供了AWT 的所有功能,還用純粹的Java代碼對AWT的功能進(jìn)行了大幅度的擴(kuò)充。 例如:并不是所有的操作系統(tǒng)都提供了對樹形控件的支持, Swing則利用了AWT中所提供的基本作圖方法模擬了一個樹形控件。 由于 Swing是用純粹的Java代碼來實現(xiàn)的,因此Swing控件在各平臺通用。 因為Swing不使用本地方法,故Swing控件稱為“輕量級控件”。
AWT和Swing之間的區(qū)別: 1)AWT 是基于本地方法的C/C++程序,其運行速度比較快;Swing是基于AWT的Java程序,其運行速度比較慢。 2)AWT的控件在不同的平臺可能表現(xiàn)不同,而Swing在所有平臺表現(xiàn)一致。
在實際應(yīng)用中,應(yīng)該使用AWT還是Swing取決于應(yīng)用程序所部署的平臺類型。例如: 1)對于一個嵌入式應(yīng)用,目標(biāo)平臺的硬件資源往往非常有限,而應(yīng)用程序的運行速度又是項目中至關(guān)重要的因素。在這種矛盾的情況下,簡單而高效的AWT當(dāng)然成了嵌入式Java的第一選擇。 2)在普通的基于PC或者是工作站的標(biāo)準(zhǔn)Java應(yīng)用中,硬件資源對應(yīng)用程序所造成的限制往往不是項目中的關(guān)鍵因素。所以在標(biāo)準(zhǔn)版的Java中則提倡使用Swing, 也就是通過犧牲速度來實現(xiàn)應(yīng)用程序的功能。 在java中,AWT包的名稱是java.awt,Swing包的名稱是javax.swing。 java.awt和javax.swing兩個包的層次關(guān)系如下: 
Container類是java.awt.Component類的子類,JComponent類又繼承自Container類。因此,JComponent類是AWT和Swing的聯(lián)系之一。 除了Swing頂層容器類(top level containers)以外,其余所有的Swing組件類都繼承自JComponent類,如前所述,JComponent類是Container類的子類,因此,所有的Swing組件都可作為容器使用。 Swing頂層容器類包括了JFrame、JDialog、JApplet、JWindow,它們?yōu)槠渌腟wing組件提供了繪制自身的場所。
 Swing組件按功能可分為如下幾類: 1、頂層容器:JFrame, JApplet, JDialog和JWindow。 2、中間容器:JPanel, JScrollPane, JSplitPane, JTooIBar等。 3、特殊容器:在用戶界面上具有特殊作用的中間容器,如JlnternalFrame、JRootPane、JLayeredPane和JDestopPane等。 4、基本組件:實現(xiàn)人機(jī)交互的組件,如Button、 JComboBox、Just, Menu、Mider等。 5、不可編輯信息的顯示組件:向用戶顯示不可編輯信息的組件,如JLabel、JProgressBar和JTooITip等。 6、可編輯信息的顯示組件:向用戶顯示能被編輯的格式化信息的組件,如JTable、JTextArea和JTextField等。 7、特殊對話框組件:可以直接產(chǎn)生特殊對話框的組件,如JColorChoosor和JFileChooser等。
Swing的4個頂層容器類直接繼承了AWT組件,而不是從JComponent派生出來的,它們分別是:JFrame、JDialog、JApplet和JWindow。 頂層容器類并不是輕量級組件,而是重量級組件(需要部分委托給運行平臺上GUI組件的對等體)。 頂層容器中: 1.JApplet可作為java小應(yīng)用程序的窗體,但通常使用java.applet.Applet類來創(chuàng)建小應(yīng)用程序。 2.JFrame集成自AWTFrame類,通常作為主窗體使用。 3.JDialog用于創(chuàng)建對話框的窗體。 4.JWindow與AWT中的Window相似,但幾乎不用,因為沒有太大的實用價值。
Swing組件的類名和對應(yīng)AWT組件的類名基本一致,只要在原來的AWT組件類名前添加“J”即可,但有如下幾個例外: 1、JComboBox:對應(yīng)于AWT里的Choice組件,但比Choice組件功能更豐富。 2、JFileChooser:對位于AWT里的FileDialog組件。 3、JSrcoIIBar:對應(yīng)AWT里的Scrollbar。注意兩個組件類名中b字母的大小寫差別。 4、JCheckBox:對應(yīng)于AWT里的Checkbox。注意兩個組件類名中b字母的大小寫差別。 5、JCheckBoxMenuItem:對應(yīng)于AWT里的CheckboxMenuItem,注意兩個組件類名中b字母的大小寫差別。
上面JCheckBox和JCheckBoxMenuItem與Checkbox和CheckboxMenuItem字母B的大小寫差別,主要是因為早期Java命名不太規(guī)范造成的。 轉(zhuǎn)自:http://blog.csdn.net/iamluole/article/details/8142257
|