您的位置:首页 > 编程语言 > Java开发

对于Java监听器的理解

2017-01-10 17:36 435 查看
监听器模式,包括三个重要的对象,即事件源、事件对象以及监听器对象。



事件源将在发生事件时向所有的注册的监听器发送事件对象,监听器对象使用事件对象中的信息来确定它们对事件的响应。

理解如下:事件源对象首先注册监听器对象,当触发事件源时事件源发送事件对象,eg:如果是按钮源则将按钮的动作事件对象发送给监听器对象,有监听器对象处理事件对象,其中事件对象封装或者说是包含了事件源对象的信息。

那么问题是,事件对象是如何什么时候产生的,又是如何传入到监听器对象中的?

即点击click时执行AbstractButton中的doClick(int)方法,触动DefaultButtonModel中的

setPressed(boolean),进而执行fireActionPerformed(),回调监听器类。

例子:

package Test;

import java.util.List;
import java.util.Vector;

public class PersonSource {
private List<PersonListener> listeners = new Vector<PersonListener>();
public void eat(){
for(PersonListener t:listeners){
t.isCanEat(new PersonEvent(this));
}
}
public void run(){

}
public void addPersonListener(PersonListener listener){
listeners.add(listener);
}
public void removePersonListener(PersonListener listener){
listeners.remove(listener);
}

public static void main(String[] args) {
PersonSource person = new PersonSource();
person.addPersonListener(new PersonListener() {

@Override
public void isCanEat(PersonEvent event) {
PersonSource source = event.getSource();
System.out.println(source.getClass());
}
});
person.eat();
}
}


package Test;

public interface PersonListener {
public void isCanEat(PersonEvent event);
}


package Test;

public class PersonEvent {
private PersonSource person;
public PersonEvent(PersonSource person){
this.person = person;
}
public PersonSource getSource(){
return person;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 监听器