原理:当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。
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();
}
}
运行效果