//将 listeners 中的类名放到 iterator
iterator =
new
HashSet(listeners).iterator();
}
//创建事件类
PropertyEvent propertyEvent =
new
PropertyEvent();
while
(iterator.hasNext()){
PropertyListener propertyListener = (propertyListener) iterator.next();
//调用用户的事件处理程序
propertyListener.propertyChanged(propertyEvent);
}
}
}
当属性值发生变化时,首先进行内部处理调用 firePropertyChange 方法,产生一个事
件对象然后用事件对象为参数来调用用户的事件处理程序。
三.事件处理的使用
1.基本用法
public
Exam exam;
exam.addListener(this);
public
void propertyChange(PropertyEvent event){...}
注:exam 是被监听对象,this 为监听对象,是已经实现了接口方法的当前类,
addListener
将当前类注册到 listeners.
2.一个被监听对象可以有多个监听对象
exam.addListener(listener1);
exam.addListener(listener2);
这样当 exam 的 property 发生变化时,actionListener1 和 actionListener2 的处理程序都
会
被调用。当然 listener1 和 listener2 必须都是已实现接口方法的类。
3.被监听的对象也可以是实现了方法的接口
exam.addListener(
new
PropertyListener(){
//用户定义事件处理过程
public
void propertyChange(PropertyEvent event){
...
}
);