GUI代表圖形用戶界面(Graphical User Interface),Java API中提供了兩套組件用戶支持編寫圖形用戶界面,包括AWT和Swing。
AWT使用本地操作系統的代碼資源,被稱為重量級組件。
Swing建立在AWT提供的基礎之上,同時使用AWT相同的事件處理機制。Swing組件是輕量級的GUI組件,完全有純Java代碼編寫,不依賴於任何特定平台,采用MVC架構方式來設計組件類。它將表示層分為三個分離的部分,分別是模型(model)、視圖(view)、控制器(controler)。模型存儲定義組件的數據,視圖從模型中的數據創建組件的可視化表示,控制器處理用戶與組件的交互操作,並在必要時更改模型或視圖以響應用戶行為。
開發Swing時因為視圖和控制器存在很強的依賴關系,於是將視圖和控制器組合稱為UI委托的帶個邏輯實體,所以Swing方法也被稱為模型-委托架構或分離模型架構。
容器和組件
容器是用來放置其它組件特殊類型的組件;組件是獨立的可視化控件。一個組件要顯示出來就必須放置在一個容器內,容器也是組件,容器也可以放置其它容器。
容器分為重量級容器和輕量級容器。
重量級容器:
包括JFrame(窗體)、JDialog(對話框)、JWindow(窗口)、JApplet(小程序)。因為都繼承AWT的Container,所以被成為重量級容器。每個程序至少要有一個重量級容器才可以提供圖形化用戶界面。
每個包含層次必須從重量級容器開始,重量級容器不能包含在其它任何容器中。我們所接觸到的是層次面板(分為內容面板和可選的菜單欄),Swing的組件都放在內容面板中。
輕量級容器:
包括常用的面板Jpanel、分隔窗格、滾動窗格、標簽窗格、工具條,它們和普通的組件一樣繼承自Swing類的JComponent,故成為輕量級容器。它們的存在主要是為了定位其它組件。
組件:
按鈕(類JButton)、單選按鈕(類JRadioButton)、復選框(類JCheckBox)、組合框(類JComboBox)、列表框(類JList)、文本字段(類JTextField)、純文本區域(類JTextArea)等 都繼承自Swing類的JComponent。
組件在容器中的布局:
組件要想在程序中顯示就必須添加到容器中,組件在容器中的排列的形式根據是否使用布局管理器,以及使用何種類型的布局管理器來決定。
如果需要將組件在容器中精確定位,就必須使用容器的setLayout(null)方法,然后調用組件的setBounds()方法設置組件的邊界。
組件采用精確定位后不支持窗口的改變。
AWT和Swing API 內置布局管理器
流式布局管理器FlowLayout(JPanel組件默認采用FlowLayout布局管理器):
安裝組件添加順序從左到右排列,可以控制容器組件居中、居左、居右,可以控制組件的垂直和水平間距。
BorderLayout管理器(不是用來放置組件的,常用於放置中間容器):
分為南北中東西五個區域,其中中間的面積和權力最大。
Jframe默認的管理器。
事件驅動編程
根據事件發生而執行代碼的編程方式稱為事件驅動編程。
例子:通過點擊一個按鈕觸發一個事件,按鈕是該事件的事件源,將監聽對象注冊到按鈕上,當一個動作事件發生在按鈕上時,按鈕通過調用定義的監聽器的actionPerformed()方法來探知監聽器。
事件和事件源
運行Java GUI程序時,程序負責與用戶交互,而事件則驅動程序的執行。事件用於描述發生了什么事情,可以由外部用戶的行為觸發,例如鼠標移動、按鈕點擊、鍵入字符等,也可以由程序的內部活動觸發,例如數據模型發生變化,程序可以選擇響應或者忽略事件。
生成一個事件並觸發它的組件成為事件源。一個事件是一個事件類的實例對象,事件類的根對象是java.util.EventObject。
事件監聽器、注冊和處理事件
事件源觸發一個事件但是事件源本事不處理,而是委托給對該 事件有興趣的對象來處理。這個被委托來處理事件的對象,被稱為事件監聽器。
成為事件源上的一個事件監聽器的方法:
1.創建一個監聽器對象 監聽器對象必須是對應的事件監聽器接口的實例。Java為每種事件類型都提供了監聽器接口。
2.將監聽器對象注冊到事件源上。