在進行gui編程時,我們最常使用的控件時按鈕,在java中JButton類代表了按鈕。它的類層次結構圖是:
java.lang.Object|_ java.awt.Component|_java.awt.Container|_javax.swing.JComponent|_javax.swing.AbstractButton|_javax.swing.JButton
我們使用按鈕的目的不是為了好看,而是點擊它,產生某些我們想要的結果,即事件處理。在c語言中,我們需要不斷檢查事件隊列,然后依次處理。但是這種方式編寫的程序可讀性很差,在java中采用了事件監聽器,它對每個需要控制的控件,都綁定一個監聽器,綁定的監聽器負責進行處理相關事宜。流程就是控件產生了事件,然后傳遞給了監聽器,監聽器接收到事件,然后進行處理。
java將控件產生的事件的所有相關信息都封裝到一個事件對象,這個事件對象都派生于java.util.EventObject,按鈕對應的事件對象是ActionEvent。每個監聽器都必須實現一個叫ActionListener的接口,實現其中的方法actionPerformed(ActionEvent e)。
public class test() {public static void main(String[] args){... ...javax.swing.JButton button = new javax.swing.JButton();... ...TestAction action = new TestAction();button.addActionListener(action);}class TestAction implements java.awt.event.ActionListener{public void actionPerformed(java.awt.event.ActionEvent e){Object obj = e.getSource();if(obj == button)test(e);}}void test(java.awt.event.ActionEvent event){... ...} }
一個監聽器可以同時被多個控件使用,除了上文的判斷某個控件的方法之外,還可以使用setActionCommand(String name)方法將這個按鈕產生的事件命名,然后在actionPerformed方法中使用e.getActionCommand().equals()方法判別。