监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
监听器原理
监听原理
1、存在事件源
2、提供监听器
3、为事件源注册监听器
4、操作事件源,产生事件对象,将事件对象传递给监听器,并且执行监听器相应监听方法
监听器典型案例:监听window窗口的事件监听器
例如:swing开发首先制造Frame**窗体**,窗体本身也是一个显示空间,对窗体提供监听器,监听窗体方法调用或者属性改变:
* 关闭窗体时,调用windowListener 的windowclosing() , 传递windowEvent参数,表示窗体关闭事件对象
* 事件对象操作事件源,获得事件源状态
自定义监听器
以上内容可以用下图解释:
通过person.addPersonListener(new PersonListener(){})使事件源与监听器间产生联系。
事件源(在事件源方法中创建事件对象):
/**
* 事件源对象,被监听
*
*/
public class Person{
private String name;
private int weight;
private PersonListener listener;
//注册监听器
public void addPersonListener(Personlistener listener){
this.listener = listener;
}
//吃法
public void eat(){
//体重增加
weight+=5;
//在方法中调用监听器方法
if(listener != null){
//监听器存在
//创建事件对象-----通过事件对象可以获得事件源
PersonEvent event = new PersonEvent(this);
listener.personeating(event);
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
监听器(参数是事件对象)
/**
* 监听器接口,提供对监听相应方法
*
*/
public interface PersonListener{
public void personeating(PersonEvent euent);//监听事件
}
事件对象(通过事件对象可以获得事件源)
/**
* 事件对象,当事件源发生动作改变,产生相应事件对象,该对象被传递给监听器指定方法
*
*/
public class PersonEvent{
public Object source;//事件源
public Object getSource(){
return source;
}
public void setSource(Object source){
this.source = source;
}
//构造事件对象时,接收事件源
public PersonEvebt(Person person){
this.source = person;
}
}
测试方法
public class PersonTest(){
public static void main(){
//步骤一:创建事件源
Person person = new Person();
person.setName("Megustas");
person.setWeight(100);
//步骤二 创建监听器,注册写到一起
person.addPersonListener(new PersonListener(){
@Override
public void personeating(PersonEvent event) {
System.out.println("监听到了,人正在吃饭!");
// 在监听方法中可以用来获得 事件源 状态
Person person = (Person) event.g