圖形用戶接口(
GUI
)庫最初的設計目的是讓程序員構建一個通用的
GUI
,使其在所有的平臺上都能夠正常的顯示。但是比較遺憾的是
AWT
產生的是在各系統看來都同樣欠佳的圖形用戶接口,
JAVA1.2
為老的
java1.0 AWT
添加了
java
基礎類(
JFC
),這是一個被稱為
“Swing”
的
GUI
的一部分。
Swing
是第二代
GUI
開發工具集,
AWT
采用了與特定平臺相關的實現,而絕大部分
Swing
組件卻不是。
Swing
是構筑在
AWT
上層的一組
GUI
組件的集合,為了保證可移植性,它完全用
Java
語言編寫,與
AWT
相比,
Swing
提供了更完整的組件,引入了許多新的特性和能力。
Swing
提供了更多的組件庫,如:
JTable
,
JTree
,
Jcombox
。
Swing
也增強了
AWT
中組件的功能。正是因為
Swing
具備了如此多的優勢所以我們以后在開發中都使用
Swing
。
JComponent
類是
Swing
組件的基類,而
JComponent
繼承自
Container
類,因此,所有的
Swing
組件都是
AWT
的容器。
Swing
采用了
MVC
設計模式。
設計模式:
當你解決一個問題時你不需要從頭做起,取而代之的是,你應該參考過去的經驗,或者向專家咨詢意見,設計模式是一種方法,該方法以一種結構化的形式提供專家意見。設計模式的靈感來自于建筑學設計模式。設計模式已經成為文化的一部分,當你談論
MVC
或
“
觀察者模式時
”
全世界的程序員都明白你的意思,因而,模式已經成為討論設計問題的有效方法。
Swing
采用了
mvc
模式,
awt
事件模型采用了
“
觀察者
”
模式。
MVC
-【模型-視圖-控制器】模式:
該模式同其他許多設計模式一樣,都遵循面向對象的設計中的一個基本原則:不讓對象具有太多的功能,如對于按鈕來說不要讓一個按鈕類完成所有的事情,替代的方法就是讓一個對象負責組件的觀感,而另一個對象負責存儲內容,
mvc
模式實現三個獨立的類:
模型-存儲內容;
?
視圖-顯示內容;
?
控制器-處理用戶輸入
mvc
模式明確規定了三個對象如何進行交互。模型存儲內容,它沒有任何用戶界面。對于一個按鈕來說,內容非常簡單,它只是一組標志,用來說明按鈕是否按下,是否啟用等。對于一個文本框來說內容稍稍復雜,它是容納當前文本的一個字符串對象。這個內容和視圖的內容并不一致--如果內容長度大于文本框的顯示長度,那么用戶只能看到的就是只有文本框顯示的那一部分。
mvc
模式總結:模型存儲完整內容,視圖給出了內容的可視化表示【完整或者不完整】,控制器負責處理用戶輸入事件,如鼠標點擊和鍵盤事件等,然后它決定是否把這些事件轉化成對模型或視圖的改變??刂破髯饔门e例:如果用戶在一個文本框中按下了一個字符鍵,那么控制器就會調用模型中的
“
插入字符
”
命令,然后模型告訴視圖進行更新,而視圖永遠不會知道文本為什么改變了,但是如果用戶按下了一個光標鍵,那么控制器會通知視圖進行卷屏滾動。卷動視圖對實際文本不會有任何的影響,因此模型永遠不會知道該事件的發生。
Mvc
模式的一個優點是
:
一個模型可以有多個視圖,其中每個視圖可以顯示完整內容的不同部分或不同方面。如果作為程序員來使用
Swing
,則不需要考慮
mvc
的體系結構,每個用戶界面元素都有一個包裝類(如
Jbutton
和
JTextField
),來保存模型和視圖。
JFrame
:
JFrame
與
Frame
的功能相當,但遠比
Frame
復雜。
JFrame
的結構相當復雜,在
JFrame
中安排了四個窗格,其中根窗格(
JRoot
)、布局窗格(
JLayeredPane
)和透明窗格(
Glass pane
)和我們沒有什么關系;他們用來組織菜單條和內容窗格,以及實現觀感的。
Swing
程序員最關心的是內容窗格(
content pane
),當設計一個框架時,組件會被添加到內容窗格中,如下代碼所示:
Container cp=f.getContentPane();
Component c=…
cp.add(c);
很明顯上面的代碼和我們在前面學的
AWT
的編程方式不一樣,不能直接用
add
方法添加組件到
JFrame
上。
JFrame
的
ContentPane
的默認布局管理器為
BorderLayout
。
JPanel
組件為中間容器,用于將較小的輕量級組件組合在一起,這意味著它與內容窗格相似。
JPanel
默認為
FlowLayout
布局。
JMenuBar
:
只能通過
JFrame
、
JWindow
或
JInternalFrame
的根窗格來添加。
JMenuBar
不能直接添加到窗體中。它由多個
Jmenu
組成,每個
JMenu
在
JMenuBar
中都表示為字符串。
JMenuBar
需要兩個附件類來輔助其工作。它們是
SingleSelectionModel
類和
LookAndFeel
類。
SingleSelectionModel
類跟蹤當前選定的菜單,
LookAndFeel
類負責繪制菜單欄以及在其中發生的事件作出響應。
?????? JMenu:有兩個用途,顯示在JMenuBar下時,它以文本字符串的形式顯示;用戶單擊字符串時它以彈出式菜單形式顯示??砂藴什藛雾?,如JMenuItem、JCheckBoxMenuItem、JRadioButtonMenuItem和Jeeparator等。JMenu需要兩個附件類來輔助其工作。它們是JPopupMenu類和LookAndFeel類。JMenu類將創建JPopupMenu類,并從當前可插入的觀感中獲得自己的觀感,用戶單擊JMenu,LookAndFeel類負責繪制菜單欄中的菜單以及對在其中發生的所有事情作出響應。