當你把界面都設計好了,總需要添加相應的執行動作給組件。
在 JAVA 中有相應的時間處理機制,叫做“監聽器”,給組件添加相應執行動作的過程叫做“注冊”。
其中的“監聽器”是一個接口,里面包含了相應的執行函數,要做的是自己實現其中的方法函數,然后“注冊”給組件。
通俗一點的話就是老媽讓我去買醬油,老媽不關心我會轉過幾天街道,會怎樣和老板到討價還價怎樣回家,老媽需要的最終結果是我把醬油帶回家。
期中買醬油的過程是我實現的,我就是事件處理機制里面的“監聽器”接受老媽的指示,老媽讓我買醬油去,就是對應將事件“注冊”給我,又一次完美體現了JAVA中實現與接口分離。
JAVA 中的組件事件有 ActionEvent、KeyEvent、FocusEvent、ComponentEvent、MouseEvent、AdjustmentEvent等。
每個組件支持其中的全部或者是一部分事件,相應的事件有相應的 Listener 來監聽事件的發生並且實現接口的方法。
程序員要做的事情就是創建一個事件的類對象,實現它里面的函數,然后將它注冊給相應的組件。
1 import javax.swing.*; 2 import java.awt.*; 3 import java.awt.event.*; 4 5 public class ButtonDemo { 6 private JFrame 7 frame=new JFrame("ButtonDemo"); 8 private JButton 9 b1 = new JButton("按鈕1"), 10 b2 = new JButton("按鈕2"); 11 private JTextField 12 txt = new JTextField(10); 13 //這里是使用一個匿名類來實現對按鈕的監聽 14 private ActionListener bl = new ActionListener() { 15 //實現監聽類中的抽象函數 16 public void actionPerformed(ActionEvent e) { 17 String name = ((JButton)e.getSource()).getText(); 18 txt.setText(name); 19 } 20 }; 21 public ButtonDemo () { 22 //將監聽對象注冊給兩個按鈕 23 b1.addActionListener(bl); 24 b2.addActionListener(bl); 25 frame.setLayout(new FlowLayout()); 26 frame.add(b1); 27 frame.add(b2); 28 frame.add(txt); 29 frame.setVisible(true); 30 frame.setSize(200,150); 31 32 } 33 public static void main(String[] args) { 34 new ButtonDemo (); 35 } 36 }
監聽接口中如果有不止一個函數,而我只想實現其中的一個函數的時候,很顯示程序是不能運行的。
因為你必須實現接口當中的所有函數的時候,才可以通過編譯,程序才可以跑起來,那應該怎們辦納?
顯然 JAVA 語言設計者已經考慮到了這一點,所以提供了一個叫做“適配器”的家伙,它默認實現了接口當中的所有函數,繼承“適配器”這個類,並覆蓋你所該興趣的那個函數就可以。
1 class MyMouseListener extends MouseAdapter{ 2 public void mouseClicked(MouseEvent e){ 3 //實現當點擊鼠標時的動作 4 } 5 }