原理:當範圍對象的狀态發生變化的時候,伺服器自動調用監聽器對象中的方法。
Java的時間監聽機制涉及到三個元件:事件源、事件監聽器、事件對象
當事件源上發生操作時,它會調用事件監聽器的一個方法,并且調用這個方法時,會傳遞事件對象過來
事件監聽器是由開發人員編寫,開發人員在事件監聽器中,通過事件對象可以拿到事件源,進而對事件源上的操作進行處理
下面以按鈕點選時間來寫代碼實作監聽按鈕被點選。
首先建立按鈕監聽接口
/**
* 監聽按鈕被點選接口 需要将按鈕所屬的對象傳給監聽接口
* @author wq
*
*/
public interface ButtonListener {
public void listenerButtonClick(ButtonObject buttonObject);
}
下面建立事件對象
/**
* 事件對象也就是按鈕對象ButtonObject
* @author wq
*
*/
public class ButtonObject {
private String buttoNname = null;
public ButtonObject(String buttoNname){
this.buttoNname = buttoNname;
}
public String getButtonName(){
return buttoNname;
}
/**
* 按鈕被點選的方法
*/
public void clickButton(){
System.out.println(buttoNname+"被點選了一下");
}
}
下面是事件源代碼
其中buttonListenerList是用來存放按鈕監聽對象,按鈕監聽對象都是實作了ButtonListener接口中的listenerButtonClick(監聽按鈕點選)方法。代碼運作思路就是,建立監聽源然後把實作監聽接口的監聽類add至監聽源中的list裡面,注意實作監聽接口的類實作的listenerButtonClick監聽方法中接收的對象是事件對象也就是ButtonObject,然後在listenerButtonClick方法中調用的正是事件對象ButtonObject的clickButton點選方法,
/**
* 事件源
* @author wq
*
*/
public class ButtonSource {
private Vector<ButtonListener> buttonListenerList = new Vector<ButtonListener>();
public void addButtonListener(ButtonListener buttonListener){
buttonListenerList.add(buttonListener);
}
//接收外部按鈕對象
public void notifyListenerEvents(ButtonObject buttonObject){
for (ButtonListener buttonListener : buttonListenerList) {
buttonListener.listenerButtonClick(buttonObject);
}
}
public void doubleClick(){
this.notifyListenerEvents(new ButtonObject("輕按兩下事件按鈕"));
}
public void singleClick(){
this.notifyListenerEvents(new ButtonObject("單機事件按鈕"));
}
public static void main(String[] args) {
ButtonSource buttonSource = new ButtonSource();
buttonSource.addButtonListener(new ButtonListener() {
public void listenerButtonClick(ButtonObject buttonObject) {
String buttonName = buttonObject.getButtonName();
if(buttonName.equals("輕按兩下事件按鈕")){
System.out.println(buttonObject.getButtonName()+"我擦按鈕要被點選了 而且是輕按兩下");
buttonObject.clickButton();
System.out.println(buttonObject.getButtonName()+"我擦按鈕已經被點選了 而且是輕按兩下");
}else{
System.out.println(buttonObject.getButtonName()+"我擦按鈕要被點選了");
buttonObject.clickButton();
System.out.println(buttonObject.getButtonName()+"我擦按鈕已經被點選了");
}
}
});
buttonSource.notifyListenerEvents(new ButtonObject("button1"));
buttonSource.doubleClick();
buttonSource.singleClick();
}
}
運作效果
