7.1 Swing簡介
7.1.1 簡介
第五講中我們學習了AWT,AWT是Swing的基礎。Swing的產生主要原因就是AWT不能滿足圖形化用戶界面發展的需要。
AWT設計的初衷是支持開發小應用程序的簡單用戶界面。例如AWT缺少剪貼板、打印支持、鍵盤導航等特性,而且原來的AWT甚至不包括彈出式菜單或滾動窗格等基本元素。
此外AWT還存在著嚴重的缺陷,人們使AWT適應基于繼續的、具有很大伸縮性的事件模型,基于同位體的體系結構也成為其致命的弱點。
隨著發展的需要,Swing出現了,Swing組件幾乎都是輕量組件,與重量組件相比,沒有本地的對等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。
這一講我們講一下基本的Swing組件使用方法和使用Swing組件創建用戶界面的初步方法。
Swing是由100%純java實現的,Swing組件是用Java實現的輕量級( light-weight)組件,沒有本地代碼,不依靠操作系統的支持,這是它與AWT組件的最大區別。由于AWT組件通過與具體平臺相關的對等類(Peer)實現,因此Swing比AWT組件具有更強的實用性。Swing在不同的平臺上表現一致,并且有能力提供本地窗口系統不支持的其它特性。
Swing采用了一種MVC的設計范式,即"模型-視圖-控制"(Model-View-Controller),其中模型用來保存內容,視圖用來顯示內容,控制器用來控制用戶輸入。
Swing外觀感覺采用可插入的外觀感覺(Pluggable Look and Feel,PL&F)
在AWT組件中,由于控制組件外觀的對等類與具體平臺相關,使得AWT組件總是只有與本機相關的外觀。Swing使得程序在一個平臺上運行時能夠有不同的外觀。用戶可以選擇自己習慣的外觀。以下三幅圖是在同一個操作系統下得到不同的外觀。
Metal風格
Motif風格
Windows風格
7.1.2 Swing的類層次結構
在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 支持取消操作
(在jdk1.3中,第一、第二和pending包沒有了,增加了plaf.multi包,主要功能:給缺省的L&F加上附加的L&F,例如一個MultiButtonUI實例可以同時處理MotifButtonUI和AudioButtonUI.)
swing包是Swing提供的最大包,它包含將近100個類和25個接口,幾乎所有的Swing組件都在swing包中,只有JtableHeader和 JtextComponent是例外,它們分別在swing.table和swing.text中。
swing.border包中定義了事件和事件監聽器類,與AWT的event包類似。它們都包括事件類和監聽器接口。
swing.pending包包含了沒有完全實現的Swing組件。
swing.table包中主要包括了表格組建(JTable)的支持類。
swing.tree同樣是JTree的支持類。
swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于顯示和編輯文檔的包。
新聞熱點
疑難解答