AWT只提供基本的組件,使很多設計變得複雜,且無法在不同的平臺下保持顯示風格的一致性.例如:如果建立一個按鈕Button對象,就會有一個按鈕(ButtonPeer)同其對象一起被建立,然後此按鈕對象會請求底層操作系統創建一個真正的按鈕.即在Windows NT 上執行,那麼創建的就是Windows NT按鈕,Linux 上執行,那麼創建的就是Linux按鈕.因此AWT組件外觀會受到底層操作系統的影響.
(2).Swing採用了一種MVC的設計範式,即"模型-視圖-控制"(Model-View-Controller),其中模型用來保存內容,視圖用來顯示內容,控制器用來控制用戶輸入。
(3).Swing外觀感覺採用可插入的外觀感覺(Pluggable Look and Feel,PL&F)
在javax.swing包中,定義了兩種類型的組件:頂層容器(JFrame,JApplet,JDialog和JWindow)和輕量級組件。Swing組件都是AWT的Container類的直接子類和間接子類。
java.awt.Component
-java.awt.Container
-java.awt.Window
-java.awt.Frame-javax.swing.JFrame
-javax.Dialog-javax.swing.JDialog
-javax.swing.JWindow
-java.awt.Applet-javax.swing.JApplet
-javax.swing.Box
-javax.swing.Jcomponet
Swing包是JFC(Java Foundation Classes)的一部分,由許多包組成
包 | 描述 |
Com.sum.swing.plaf.motif | 用戶界面代表類,它們實現Motif界面樣式 |
Com.sum.java.swing.plaf.windows | 用戶界面代表類,它們實現Windows界面樣式 |
Javax.swing | Swing組件和使用工具 |
Javax.swing.border | Swing輕量組件的邊框 |
Javax.swing.colorchooser | JcolorChooser的支持類/接口 |
Javax.swing.event | 事件和偵聽器類 |
Javax.swing.filechooser | JFileChooser的支持類/接口 |
Javax.swing.pending | 未完全實現的Swing組件 |
Javax.swing.plaf | 抽象類,定義UI代表的行爲 |
Javax.swing.plaf.basic | 實現所有標準界面樣式公共功能的基類 |
Javax.swing.plaf.metal | 用戶界面代表類,它們實現Metal界面樣式 |
Javax.swing.table | Jtable組件 |
Javax.swing.text | 支持文檔的顯示和編輯 |
Javax.swing.text.html | 支持顯示和編輯HTML文檔 |
Javax.swing.text.html.parser | Html文檔的分析器 |
Javax.swing.text.rtf | 支持顯示和編輯RTF文件 |
Javax.swing.tree | Jtree組件的支持類 |
Javax.swing.undo | 支持取消操作 |
4.MVC(Model-View-Control)體系結構
Model:存儲組件數據的地方.如JCheckBox中的Model將存儲所有選項的值,並以boolean的值來表示,而JTable的Model則會存儲所有表格上的數據.
View: 顯示組件的外觀.
Controller:處理用戶在組件上的操作,並將改變後的數據存儲在Model中。
爲了簡化組件的設計工作,在Swing組件中View和Controller兩部分合爲一體。每個組件有一個相關的分離模型和它使用的界面(包括視圖和控件)。比如,按鈕JButton有一個存儲其狀態的分離模型ButtonModel對象。組件的模型是自動設置的,例如一般都使用JButton 而不是使用ButtonModel 對象。另外,通過Model類的子類或通過實現適當的接口,可以爲組件建立自己的模型。把數據模型與組件聯繫起來用setModel( )方法。
Swing組件中的Model可以分成三類:
(1).存儲組件內將被用來操作的數據.
(2).存儲控制組件操作模式的數據
(3).存儲組件本身性質的數據模式
MVC是現有的編程語言中製作圖形用戶界面的一種通用的思想,其思路是把數據的內容本身和顯示方式分離開,這樣就使得數據的顯示更加靈活多樣。比如,某年級各個班級的學生人數是數據,則顯示方式是多種多樣的,可以採用柱狀圖顯示,也可以採用餅圖顯示,也可以採用直接的數據輸出。因此在設計的時候,就考慮把數據和顯示方式分開,對於實現多種多樣的顯示是非常有幫助的。