本文譯自Introduction to Event Listeners
JAVA官網的入門教學
名詞對照:監聽器=listener、事件=event、最高等級容器=top-level container、容器=container、類別=class、元件=component、文字輸入區域=text area
簡稱說明:GUI=Graphic User Interface=圖形化使用者介面
事件監聽器簡介
如果您曾經閱讀任何"如何使用元件"的頁面,您可能已經知道一些關於事件監聽器的基礎了。
讓我們看看一個最簡單的事件處理範例吧。它是一個叫做呼叫器的按鈕,特色是當您按它時它就會嗶嗶叫。
按那個Launch按鈕來執行呼叫器。它使用了 Java™ Web Start (download JDK 6 or later)技術;相對地,如果您想自行編譯它然後執行,請參考 example index。


您可以在

數種監聽器可以註冊,以通知從各種來源而來的各種事件。同樣地,一個相同的監聽器可以監聽從不同物件來的通知。
每一個事件都是以一個發出關於事件資訊以及定義事件來源的物件作為代表。事件來源通常是元件或是模型(model),但其他種類的物件也可以成為事件來源。
不管您何時想要從一個特定的元件偵測事件,首先查看一下 關於這個元件的how-to章節。元件的how-to章節的清單在此。how-to章節給出了一些您最可能關心的事件的處理範例。在 How to Use Color Choosers(如何使用顏色挑選器)裡面,舉例來說,您會找到一個追蹤選取顏色的變化的範例。
接下來的範例顯示了事件監聽器可以註冊在數個物件上,以及一樣的事件可以被送至數個監聽器。這個範例包含兩個事件來源 (

試試這個:
您可以在
在上方的程式碼中,
讓我們看看一個最簡單的事件處理範例吧。它是一個叫做呼叫器的按鈕,特色是當您按它時它就會嗶嗶叫。
按那個Launch按鈕來執行呼叫器。它使用了 Java™ Web Start (download JDK 6 or later)技術;相對地,如果您想自行編譯它然後執行,請參考 example index。
Beeper.java
找到整個程式。以下是實踐按鈕上的事件處理的程式碼: public class Beeper ... implements ActionListener { ... //where initialization occurs: button.addActionListener(this); ... public void actionPerformed(ActionEvent e) { ...//Make a beep sound... } }
Beeper
類別實作了 ActionListener
介面,而這個介面擁有一個方法: actionPerformed
。由於 Beeper
實作了 ActionListener
,一個 Beeper
物件可以當作一個監聽器來為按鈕註冊action events。一旦 Beeper
被註冊使用
addActionListener
方法, Beeper
的 actionPerformed
方法就會在每次按鈕按下時被呼叫。一個更複雜的例子
上面那個您看到的,非常簡單的事件模型,是十分有用以及有彈性的。任何數量的事件監聽器物件可以監聽任何數量的事件來源物件,的所有類型的事件。舉例來說,一個程式可能為每個事件來源製造一個監聽器。或者,一個程式可能只有一個監聽器來監聽所有來源的事件。一個程式甚至可以擁有超過一個監聽器來監聽單一一種來自單一來源的事件。每一個事件都是以一個發出關於事件資訊以及定義事件來源的物件作為代表。事件來源通常是元件或是模型(model),但其他種類的物件也可以成為事件來源。
不管您何時想要從一個特定的元件偵測事件,首先查看一下 關於這個元件的how-to章節。元件的how-to章節的清單在此。how-to章節給出了一些您最可能關心的事件的處理範例。在 How to Use Color Choosers(如何使用顏色挑選器)裡面,舉例來說,您會找到一個追蹤選取顏色的變化的範例。
接下來的範例顯示了事件監聽器可以註冊在數個物件上,以及一樣的事件可以被送至數個監聽器。這個範例包含兩個事件來源 (
JButton
) 和兩個事件監聽器。事件監聽器的其中一個監聽( MultiListener
類別)了來自兩個按鈕的事件。只要它接收到一個事件,它就在上方的文字輸入區中增加"這個事件的命令"(也就是JButton上的文字)。第二個事件監聽器( Eavesdropper
類別)只有監聽其中一個按鈕。當它接受到一個事件,它就增加文字到下方的文字輸入區域。試試這個:
- 按下Launch按鈕來執行MultiListener。它使用Java™ Web Start (download JDK 6 or later);相對地,如果您想自行編譯它然後執行,請參考 example index.
- 按下Blah blah blah 按鈕。只有
MultiListener
物件為了這個按鈕註冊了監聽器。 - 按下You do not say! 按鈕。
MultiListener
物件與Eavesdropper
物件都註冊了這個按鈕。
MultiListener.java
裡找到完整的程式碼。這裡節錄了實踐按鈕事件處理的部分:public class MultiListener ... implements ActionListener { ... //where initialization occurs: button1.addActionListener(this); button2.addActionListener(this); button2.addActionListener(new Eavesdropper(bottomTextArea)); } public void actionPerformed(ActionEvent e) { topTextArea.append(e.getActionCommand() + newline); } } class Eavesdropper implements ActionListener { ... public void actionPerformed(ActionEvent e) { myTextArea.append(e.getActionCommand() + newline); } }
在上方的程式碼中,
MultiListener
和 Eavesdropper
實作了 ActionListener
介面以及成為 JButton 的
addActionListener
方法的監聽器。兩個類別實作的 actionPerformed
方法很相似:他們簡單地增加了文字到文字輸入區域。
沒有留言:
張貼留言