201711671212 《JAVA程式設計》第九周學習總結
教材學習內容總結
本週學習內容:第9章 元件及事件處理
1.JavaSwing概述:
- 元件:Componet類的子類或間接子類建立的物件。
- 容器:Container的子類或間接子類建立的物件。
- add()方法:將元件新增到容器中。
- removeAll()方法:移掉容器中的所有元件。
- 可以吧一個容器新增到另一個容器中實現容器的巢狀。
- validate()方法:保證容器中的元件能正確顯示出來。
2.視窗
- JFrame建立一個無標題的視窗。
- 視窗預設被系統新增到顯示器螢幕上,不允許將一個視窗新增到另一個容器中。
- 許多JFrame常用方法
-
1)public void setBounds(int a,int b,int width,int height 設定視窗的初始位置是(a,b),即距螢幕左面a個畫素、距螢幕上方b個畫素;視窗的寬是width,高是height。
2)public void setSize(int width,int height) 設定視窗的大小。
3)public void setLocation(int x,int y) 設定視窗的位置,預設位置是(0,0)
4)public void setVisible(boolean b) 設定視窗是否可見,視窗預設是不可見的。
5)public void setResizable(boolean b) 設定視窗是否可調整大小,預設可調整大小。
6)public void dispose() 撤消當前視窗,並釋放當前視窗所使用的資源。
7)public void setExtendedState(int state) 設定視窗的擴充套件狀態.
8)public void setDefaultCloseOperation(int operation) 該方法用來設定單擊窗體右上角的關閉圖示後,程式會做出怎樣的處理。如:EXIT_ON_CLOSE
9)public void setLayout(LayoutManager mgr) 設定此容器的佈局管理器。
10)public Component add(Component comp) 將指定元件追加到此容器的尾部。
11)public void setMenuBar(MenuBar mb) 將此 frame 的選單欄設定為指定的選單欄。
12)public void validate() 使用 validate 方法會使容器再次佈置其子元件。在修改此容器的子元件的時候(在容器中新增或移除元件,或者更改與佈局相關的資訊),應該呼叫上述方法。
- 選單放在選單條例,選單項放在選單裡。
3.元件與佈局
常用元件(都是JComponent的子類) | 作用 |
JTextField(文字框) | 允許使用者在文字框中輸入單行文字 |
JTextArea(文字區) | 允許使用者在文字區中輸入多行文字 |
JButton(按鈕) | 允許使用者單擊按鈕 |
JLabel(標籤) | 標籤為使用者提供提示資訊 |
JChexkBox(複選框) | 為使用者提供多項選擇 |
JRadioButton(單選按鈕) | 為使用者提供單項選擇 |
JComboBox(下拉列表) | 為使用者提供單項選擇 |
JPasswordField(密碼框) | 允許使用者在密碼框中輸入單行密碼,預設回顯字元“*”。 |
常用容器 | 作用 |
JPanel面板 | 建立面板(預設佈局:FlowLayout佈局) |
JTabbedPane選項卡窗格 | 可作為中間容器(中間容器必須被新增到底層容器才能發揮作用) |
JScrollPane滾動窗格 | 只可以新增一個元件,通過滾動來檢視該元件 |
JSplitPane拆分窗格 | 水平拆分(拆分線水平移動)和垂直拆分(拆分線垂直移動) |
JLayeredPane分層窗格 | 處理元件重疊問題 |
常用佈局(控制組件在容器中的位置) | 作用 |
FlowLayout佈局 | 建立居中對齊的佈局現象 |
BorderLayout佈局 | 容器空間被劃分為東、西、南、北、中5個區域,中間的區域最大 |
CardLayout佈局 | 容納多個元件,最先加入的在最上面,同一時刻容器只能顯示一個元件 |
GridLayout佈局 | 將容器劃分成若干行若干列的網格區域 |
null佈局 | 可以準確定位元件在容器中的位置和大小 |
BoxLayout佈局 | 利用容器的巢狀,將某個容器嵌入幾個盒式容器 |
4.處理事件
(1)處理事件的介面:
監視器負責處理事件源發生的事件。監視器是一個物件,為了處理事件源發生的事件,監視器這個物件會自動呼叫介面中一個方法來處理事件。
(2)AcitionEvent事件
-
ActionEvent事件源 : 文字框、按紐、選單項、密碼框和單選按紐都可以觸發ActionEvent事件,即都可以成為ActionEvent事件的事件源。
-
註冊監視器: ActionListener介面作為監視器;事件源.addActionListener(ActionListener listen);將實現ActionListener介面的類的例項註冊為事件源的監視器。
-
ActionListener介面:重寫介面中的方法作為事件處理。
-
ActionEvent類中的方法:下面的方法能夠獲取發生動作的事件源。
(3)ItemEvent事件
- ItemEvent事件源 :選擇框、下拉列表都可以觸發ItemEvent事件。
- 註冊監視器:ItemListener介面作為監視器。
- ItemListener介面:重寫方法作為事件處理。
-
ItemEvent類中的方法 :
getSource()方法返回發生Itemevent事件的事件源外
getItemSelectable()方法返回發生Itemevent事件的事件源。
(4)DocumentEvent事件
- DocumentEvent事件源 :文字區所維護的文件能觸發DocumentEvent事件 。
- 註冊監視器:DocumentListener作為監視器。
- DocumentListener介面:重寫介面中的方法作為事件處理。
(5)MouseEvent事件
-
使用MouseListener介面可以處理以下5種操作觸發的滑鼠事件
在事件源上按下滑鼠鍵、在事件源上釋放滑鼠鍵、在事件源上擊滑鼠鍵、滑鼠進入事件源、滑鼠退出事件源。
-
註冊監視器:MouseListener介面作為監視器
事件源.addMouseListener(MouseListener listener)。
-
MouseListener介面中有如下方法:重寫方法作為事件源的處理
mousePressed(MouseEvent) 負責處理在元件上按下滑鼠鍵觸發的滑鼠事件
mouseReleased(MouseEvent) 負責處理在元件上釋放滑鼠鍵觸發的滑鼠事件
mouseEntered(MouseEvent) 負責處理滑鼠進入元件觸發的滑鼠事件
mouseExited(MouseEvent) 負責處理滑鼠離開元件觸發的滑鼠事件
mouseClicked(MouseEvent) 負責處理在元件上單擊滑鼠鍵觸發的滑鼠事件
-
MouseEvent 中有下列幾個重要的方法:
getX() 獲取滑鼠指標在事件源座標系中的x-座標。
getY() 獲取滑鼠指標在事件源座標系中的y-座標。
getModifiers() 獲取滑鼠的左鍵或右鍵。
getClickCount() 獲取滑鼠被單擊的次數。
getSource() 獲取發生滑鼠事件的事件源。
(6)焦點事件
- 焦點事件源 :元件可以觸發焦點事件。
- 註冊監視器:addFocusListener(FocusListener listener)。
-
FocusListener介面 : 建立監視器的類必須要實現FocusListener介面。
public void focusGained(FocusEvent e) public void focusLost(FocusEvent e)
-
獲得輸入焦點:public boolean requestFocusInWindow( ) 方法。
(7)鍵盤事件
- 某個元件使用addKeyListener方法註冊監視器。
-
介面KeyListener中有如下方法:
public void keyPressed(KeyEvent e),
public void keyTyped(KeyEvent e),
public void KeyReleased(KeyEvent e)
-
相關方法:
public int getKeyCode()判斷哪個鍵被按下、敲擊或釋放,返回一個鍵碼值 。
getKeyChar()判斷哪個鍵被按下、敲擊或釋放,返回鍵上的字元。
(8)視窗事件
方法 | 作用 |
public void windowActivated(WindowEvent e) | 當視窗從非啟用狀態到啟用時,視窗的監視器呼叫該方法。 |
public void windowDeactivated(WindowEvent e) | 當視窗啟用狀態到非啟用狀態時,視窗的監視器呼叫該方法。 |
public void windowClosing(WindowEvent e) | 當視窗正在被關閉時,視窗的監視器呼叫該方法。 |
public void windowClosed(WindowEvent e) | 當視窗關閉後,視窗的監視器呼叫該方法。 |
public void windowIconified(WindowEvent e) | 當視窗圖示化時,視窗的監視器呼叫該方法。 |
public void windowDeiconified(WindowEvent e) | 當視窗撤消圖示化時,視窗的監視器呼叫該方法。 |
public void windowOpened(WindowEvent e) | 當視窗開啟時,視窗的監視器呼叫該方法。 |
(9)事件總結
- 授權模式: Java的事件處理是基於授權模式,即事件源呼叫呼叫方法將某個物件註冊為自己的監視器。
- 介面回撥: addXXXListener(XXXListener listener)方法中的引數是一個介面,listener可以引用任何實現了該介面的類所建立的物件,當事件源發生事件時,介面listener立刻回撥被類實現的介面中的某個方法。
- 方法繫結:當事件源觸發事件發生後,監視器準確知道去呼叫哪個方法。
- 保持鬆耦合:當事件源觸發事件發生後,系統知道某個方法會被執行,但無須關心到底是哪個物件去呼叫了這個方法,因為任何實現介面的類的例項(做為監視器)都可以呼叫這個方法來處理事件。
(10)使用MVC結構
-
模型(model) 用於儲存資料的物件。
-
檢視(view) 為模型提供資料顯示的物件。
-
控制器(controller)處理使用者的互動操作,對於使用者的操作作出響應,讓模型和檢視進行必要的互動,即通過檢視修改、獲取模型中的資料;當模型中的資料變化時,讓檢視更新顯示。
參考資料
-
Java 2 實用教程(第5版)