java中AWT和SWing的區別與聯絡

來源:互聯網
上載者:User

AWT和Swing都是java中的包。

AWT(Abstract Window Toolkit):抽象視窗工具包,早期編寫圖形介面應用程式的包。

Swing :為解決 AWT 存在的問題而新開發的圖形介面包。Swing是對AWT的改良和擴充。   

AWT和Swing的實現原理不同:
       AWT的圖形函數與作業系統提供的圖形函數有著一一對應的關係。也就是說,當我們利用 AWT構件圖形化使用者介面的時候,實際上是在利用作業系統的圖形庫。
       不同的作業系統其圖形庫的功能可能不一樣,在一個平台上存在的功能在另外一個平台上則可能不存在。為了實現Java語言所宣稱的"一次編譯,到處運行"的概念,AWT不得不通過犧牲功能來實現平台無關性。因此,AWT 的圖形功能是各作業系統圖形功能的“交集”。
        因為AWT是依靠本地方法來實現功能的,所以AWT控制項稱為“重量級控制項”。

       而Swing ,不僅提供了AWT 的所有功能,還用純粹的Java代碼對AWT的功能進行了大幅度的擴充。
       例如:並不是所有的作業系統都提供了對樹形控制項的支援, Swing則利用了AWT中所提供的基本作圖方法類比了一個樹形控制項。
       由於 Swing是用純粹的Java代碼來實現的,因此Swing控制項在各平台通用。
       因為Swing不使用本地方法,故Swing控制項稱為“輕量級控制項”。

       AWT和Swing之間的區別:
       1)AWT 是基於本地方法的C/C++程式,其運行速度比較快;Swing是基於AWT的Java程式,其運行速度比較慢。
       2)AWT的控制項在不同的平台可能表現不同,而Swing在所有平台表現一致。

       在實際應用中,應該使用AWT還是Swing取決於應用程式所部署的平台類型。例如:
       1)對於一個嵌入式應用,目標平台的硬體資源往往非常有限,而應用程式的運行速度又是項目中至關重要的因素。在這種矛盾的情況下,簡單而高效的AWT當然成了嵌入式Java的第一選擇。
       2)在普通的基於PC或者是工作站的標準Java應用中,硬體資源對應用程式所造成的限制往往不是項目中的關鍵因素。所以在標準版的Java中則提倡使用Swing, 也就是通過犧牲速度來實現應用程式的功能。

在java中,AWT包的名稱是java.awt,Swing包的名稱是javax.swing。
java.awt和javax.swing兩個包的層次關係如下:


Container類是java.awt.Component類的子類,JComponent類又繼承自Container類。因此,JComponent類是AWT和Swing的聯絡之一。
除了Swing頂層容器類(top level containers)以外,其餘所有的Swing組件類都繼承自JComponent類,如前所述,JComponent類是Container類的子類,因此,所有的Swing組件都可作為容器使用。
Swing頂層容器類包括了JFrame、JDialog、JApplet、JWindow,它們為其他的Swing組件提供了繪製自身的場所。

  
Swing組件按功能可分為如下幾類:
  1、頂層容器:JFrame, JApplet, JDialog和JWindow。
  2、中間容器:JPanel, JScrollPane, JSplitPane, JTooIBar等。
  3、特殊容器:在使用者介面上具有特殊作用的中間容器,如JlnternalFrame、JRootPane、JLayeredPane和JDestopPane等。
  4、基本組件:實現人機互動的組件,如Button、 JComboBox、Just, Menu、Mider等。
  5、不可編輯資訊的顯示組件:向使用者顯示不可編輯資訊的組件,如JLabel、JProgressBar和JTooITip等。
  6、可編輯資訊的顯示組件:向使用者顯示能被編輯的格式化資訊的組件,如JTable、JTextArea和JTextField等。
  7、特殊對話方塊組件:可以直接產生特殊對話方塊的組件,如JColorChoosor和JFileChooser等。

Swing的4個頂層容器類直接繼承了AWT組件,而不是從JComponent派生出來的,它們分別是:JFrame、JDialog、JApplet和JWindow。
頂層容器類並不是輕量級組件,而是重量級組件(需要部分委託給運行平台上GUI組件的對等體)。


頂層容器中:
1.JApplet可作為java小應用程式的表單,但通常使用java.applet.Applet類來建立小應用程式。
2.JFrame整合自AWTFrame類,通常作為主表單使用。
3.JDialog用於建立對話方塊的表單。
4.JWindow與AWT中的Window相似,但幾乎不用,因為沒有太大的實用價值。

Swing組件的類名和對應AWT組件的類名基本一致,只要在原來的AWT組件類名前添加“J”即可,但有如下幾個例外:
  1、JComboBox:對應於AWT裡的Choice組件,但比Choice組件功能更豐富。
  2、JFileChooser:對位於AWT裡的FileDialog組件。
  3、JSrcoIIBar:對應AWT裡的Scrollbar。注意兩個組件類名中b字母的大小寫差別。
  4、JCheckBox:對應於AWT裡的Checkbox。注意兩個組件類名中b字母的大小寫差別。
  5、JCheckBoxMenuItem:對應於AWT裡的CheckboxMenuItem,注意兩個組件類名中b字母的大小寫差別。

  上面JCheckBox和JCheckBoxMenuItem與Checkbox和CheckboxMenuItem字母B的大小寫差別,主要是因為早期Java命名不太規範造成的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.