Java實現對組件事件(如單擊、輸入等)的監聽和JavaScript類似,都是先添加Listener,再寫觸發函數,不同的是,Java實現監聽前必須使用implements將各個接口添加到類內。
相關的庫爲java.awt.event.*
例如要添加行爲事件的接口ActionListener,則需要在實現窗口的類內作如下操作:
public class Test extends JFrame implements ActionListener{ public Test(){ //... } public void actionPerformed(ActionEvent event){ //... } }
注意只要添加了ActionListener接口,並且Test不是抽象類,則必須加入相應的觸發函數,這裏加入的爲actionPerfomed。
以處理按鍵單擊爲例,具體步驟如下:
①添加ActionListener接口
②在相應的類內寫觸發函數actionPerformed(ActionEvent event)
③對按鈕(設爲button1)添加監聽器:button1.addActionListener(this)
④將按鈕加入容器
⑤在觸發函數內,判斷觸發對象,有兩種方法
第一種,使用event的getSource()方法,獲取的是對象,可以使用==表達式直接判斷對象,例如
Object source = event.getSource(); if(source == button1){ //... }
第二種,事先在添加監聽器前設定行爲命令,例如先對button1添加動作命令"trig1"
button1.setActionCommand("trig1");
在觸發函數內,使用getActionCommand()方法來獲取行爲命令:
if(event.getActionCommand() == "trig1"){ //... }
第二種用法多用在一些多個組件觸發相同的動作時,例如退出程序功能,可能同時存在於菜單和工具欄,他們可以使用同樣的命令,來簡化代碼。
對於其他的監聽,與此類似,不再贅述,需要注意的是,一定要先添加組件的各種屬性,再將其放入容器,否則設置會被忽略。
對於窗口的監聽,有大量的方法,如果像上面那樣使用,則會產生很多空方法,爲了避免這一點,可以採用適配器類來監聽。可以在原來的類的下面再創建一個類,繼承響應的適配器。
例如下面的鍵盤監聽,添加一個類繼承KeyAdapter來實現監聽,對於需要的觸發函數,覆蓋即可
class KeyMonitor extends KeyAdapter{ public void keyTyped(KeyEvent event){ //... } }