background image

 

//将 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){

  ...
  }
  );