在java中的事件處理中,包括三部分:
事件源—事件對象—事件監聽器;
一、所有的事件都在java.awt.event和javax.swing.event中;
我們可以查閱光放文檔來學習這些事件的內容
現在的一個問題是我們很難全部記住每個組件能夠產生的事件類型,也不能夠全部記住每個組件針對具體的事件應該添加哪種事件監聽器,下面提供一種非常好的方法:
(1)當我們因為某個事件,需要為某個組件注冊一個事件監聽器時,就在官方文檔中查閱該組件的所有的形如:addActionListener()的方法,這樣一來我們就知道了這個組件都能夠注冊那些監聽器(去掉add就是ActionListener監聽器,也就是說不僅僅只有ActionListener這一種事件監聽器,還有很多種類,如ItemListener等,我們必須為指定的組件指定合適的能夠處理程序所要求的正確的監聽器);
(2)之后我們可以在官方文檔中查閱這些這些監聽器(如:ActionListener)接口的所有需要被重寫的方法,如actionPerformed(ActionEvent e)(有些監聽器接口中要重寫的方法不是actionPerformed()而是其他的方法,不要誤認為所有的監聽器接口都要實現actionPerformed方法),從參數中就能夠知道該監聽器到底接收哪種事件,ActionEvent,只要上網搜索就能夠知道該事件是不是我們想要處理的那個事件,
(3)通過上面的步驟我們就能夠知道到底要添加哪種監聽器,從而創建這種監聽器的子類或者通過適配器(由於有的監聽器接口中要重寫的方法不僅僅只有一個,但是如果我們只想重寫其中一個或者幾個的話,那么就可以使用適配器),在實現里面的方法就沒有問題了
二、我們列舉一些常用的事件類:
《》java.awt.event.ActionEvent
——動作事件,如鼠標單擊
能夠觸發這個事件的組件有:
JButton(鼠標單擊)、JTextField(輸入回車)、JPasswordField(輸入回車);
《》java.awt.event.AdjustmentEvent
——調整事件,如移動滾動條的滑塊位置
《》java.awt.event.ComponentEvent
——組件事件,如移動組件或改變組件大小
(java.awt.event.ComponentListener
java.awt.event.ComponentAdapter)
《》java.awt.event.FocusEvent
——焦點事件,如得到或失去焦點
一般是說像文本框這樣的控件,如果它得到鍵盤焦點的話,他就能夠接收鍵盤輸入的字符;否則就不能夠得到鍵盤輸入的字符
(java.awt.event. FocusListener
java.awt.event. FocusAdapter)
《》java.awt.event.ItemEvent
——項事件,如單、復選框、下拉式框中的選中狀態發生變化
(java.awt.event.ItemListener)
觸發該事件的組件有:
JCheckBox、JRadioButton、JComboBox;當鼠標單擊引起選擇狀態放生變化時
《》java.awt.event.KeyEvent
——鍵盤事件,如通過鍵盤輸入字符
(java.awt.event.KeyListener
java.awt.event.KeyAdapter)
《》java.awt.event.MouseEvent
——鼠標事件,如按下鼠標按鍵
(java.awt.event.MouseListener
java.awt.event.MouseAdapter)
《》java.awt.event.MouseWheelEvent
——鼠標滾輪事件
(java.awt.event.MouseWheelListener)
《》java.awt.event.WindowEvent
——窗口事件
(java.awt.event.WindowListener
java.awt.event.WindowAdapter)
《》javax.swing.event.DocumentEvent
——文檔事件,如文本區域的內容發生變化
(javax.swing.event.DocumentListener)
觸發該事件的組件有:
JTextField、JPasswordField、JTextArea;
當文本區域的屬性或者內容發生變化時
至於Document的使用,可以查一下,就不在多說了
《》javax.swing.event.ListSelectionEvent
——列表選擇事件,如列表框選項發生變化(如JList)
(javax.swing.event.ListSelectionListener)
觸發該事件的組件有JList;當當前被選中的列表選項改變時
三、當我們實現了那些事件監聽類的抽象方法后,參數位置就是接收的事件類型如
public void actionPerformed(ActionEvent evt) ;
一般在事件類中都有方法:
public Object getSource();
//用來返回當前事件的事件源組件,通過向下轉型就能夠得到事件源組件,如:JButton bt = (JButton)evt.getSource() ;
這樣一旦得到這個事件源組件,我們就能夠利用這個組件的各種方法來查看組件的各種屬性和狀態,這樣就能夠做非常多的事情了
此外不同的事件類中還有不同的方法,就不再介紹
四、如果每個組件注冊的事件監聽器都不共用,即一個組件唯一的注冊一個自己的監聽器的話,那么在創建事件監聽器時,使用適配器的匿名內部類是非常好的選擇
五、《》鼠標事件處理
鼠標事件處理就分為上面介紹的三種:鼠標事件監聽、鼠標移動監聽、鼠標滾輪事件監聽;
——java.awt.event.MouseListener
①public interface MouseListener extends EventListener{
public void mouseClicked(MouseEvent e) ;
//處理完整的鼠標單擊事件
public void mousePresses(MouseEvent e);
//處理按下鼠標事件
public void mouseReleased(MouseEvent e);
//處理放開鼠標事件
public void mouseEntered(MouseEvent e) ;
//處理鼠標進入組件事件
public void mouseEntered(MouseEvent e);
//處理鼠標離開組件事件
}
②在MouseEvent類中的成員方法:
public Point getPoint() ;//返回鼠標在組件中的位置
public int getX() ;
public int getY() ;
public int getModifiers()
//返回點擊了鼠標的那個按鍵,左右鍵或話滑輪鍵
那么我們如何知道這些按鍵對應的整型值呢?
在抽象類InputEvent中很多的靜態常量,這些靜態常量指定了
到底是那個按鍵如:BUTTON1_MASK——點擊了鼠標的左鍵
BUTTON2_MASK——點擊了鼠標的滑輪鍵
BUTTON3_MASK——點擊了鼠標的右鍵
還有很多可以隨時查閱
——java.awt.event.MouseMotionListener
鼠標移動事件監聽器
①
public interface MouseMotionListener extends EventListener{
public void mouseDragged(MouseEvent e);
//處理鼠標拖動事件
public void mouseMoved(MouseEvent e);
//處理鼠標移動事件
}
——java.awt.event.MouseWheelListener
鼠標滾輪監聽器
①public interface MouseWheelListener extends EventListener{
public void mouseWheelMoved(MouseWheelEvent e) ;
//處理鼠標滾輪事件
}
②鼠標滾輪事件MouseWheelEvent成員方法
public Point getPoint();
public int getX() ;
public int getY();
public int getWheelRotation() ;//返回滾困旋轉格數
返回的數據的正負標示了旋轉的方向
六、《》鍵盤事件處理
包括焦點事件處理和鍵盤事件處理
——java.awt.event.FocusAdapter
① public void interface FocusListener extends EventListener{
public void focusGained(FocusEvent e) ;
//處理獲得鍵盤焦點事件
public void focusLost(FocusEvent e) ;
//處理失去鍵盤焦點事件
}
②FocusEvent類的成員方法:
getSource() ;
——java.awt.event.KeyListener
鍵盤事件監聽器
public interface KeyListener extends EventListener{
public void keyTyped(KeyEvent e) ;//處理輸入某個字符的事件
publci void keyPresses(KeyEvent e) ;//處理按下某個鍵的事件
publci void keyReleased(KeyEvente) ;//處理放開某個鍵的事件
}
②KeyEvent類的成員方法:
public Object getSource() ;
public char getKeyChar() ; //返回鍵盤上輸入的字符