监听器是一段java代码,用来监听另一个java对象方法调用和属性改变的。
监听器的工作原理:1、存在事件源,即被监听对象。
2、存在监听器接口,在具体应用中对其进行实现,用来监听事件源对象方法调用和属性改变。
3、注册监听器,是监听器和事件源建立联系。
4、事件源发生改变,传递事件对象(Event)给监听器。
5、触发监听器,监听器获得事件对象,进行操作。
有个Person类,拥有eat()和sleep()方法,现在需要对这两个方法进行监听。
<pre class="java" name="code">public class Person {
private String name;
private PersonListener listener;
public void eat(){
if(listener != null){
//创建事件对象
PersonEvent e = new PersonEvent(this);
listener.personeat(e);
}
}
public void sleep(){
if(listener != null){
//创建事件对象
PersonEvent e = new PersonEvent(this);
listener.personsleep(e);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addPersonListener(PersonListener listener){
this.listener = listener;
}
}
创建一个监听器接口,对Person类的eat()方法和sleep()方法进行监听。
public interface PersonListener {
public void personeat(PersonEvent e);
public void personsleep(PersonEvent e);
}
创建事件源对象,
public class PersonEvent {
private Object source;
public PersonEvent(Person person){
this.source = person;
}
public Object getSource() {
return source;
}
public void setSource(Object source) {
this.source = source;
}
}
测试监听:
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
person.setName("小明");
person.addPersonListener(new PersonListener() {
@Override
public void personsleep(PersonEvent e) {
// TODO Auto-generated method stub
System.out.println("监听到了!");
Person person = (Person)e.getSource();
System.out.println(person.getName() + "在睡觉");
}
@Override
public void personeat(PersonEvent e) {
// TODO Auto-generated method stub
System.out.println("监听到了!");
Person person = (Person)e.getSource();
System.out.println(person.getName() + "在吃饭");
}
});
person.eat();
person.sleep();
}
}