|
根据应用剪裁JavaBeans(3)
· 事件监听器
当属性改变时,Java组件用JDK 1.1中出现的新概念,事件监听器(Event Listeners)接口通知其它组件。当属性改变时,其对象创建一个包括属性信息的事件对象(Event Objects),然后传给对此属性感兴趣的组件。
在AWT旧的事件模型中,事件处理基于继承:为了捕获一个事件并作出处理,你必须建立一个已经处理这个事件的父类的子类,改变其行为。这使得难于创建、处理新的事件类型。事件监听器方法基于事件集中处理:产生事件的对象维护一张其它对这类事件感兴趣的对象的列表,当事件发生时,将事件传给这些对象。
· 事件监听器(概念性)的例子 我们举参议员的例子。

图4事件监听器示例
在图4中,考虑四个对象(记者、战略家、助手和狂热者),他们都想知道参议员的薪水变动(薪水是参议员类的一个属性)。假设法律规定,参议员对感兴趣的人必须通知其薪水的变动。参议员提供一个事件监听器注册方法,本例为void addSalaryListener(SalaryListenerl)。调用此方法的对象被加入到参议员为薪水变动事件而维护的监听器列表中。当薪水变动时,调用setSalary()方法,它同时创建一个包括薪水变动量的SalaryChangedEvent对象,调用监听器的void salaryChanged(SalaryChangedEventevent)方法将此事件传给监听器。对此事件,各监听器完成各自特定的功能。
薪水实际的变动量包含在参议员传给各监听器的SalaryChangedEvent对象中,我们可以从java.util.EventObject创建包含参议员薪水变动量的子类:
< width="381">
< width="373" bgcolor="#CCCCCC">//Encapsulates salary change
public class SalaryChangedEvent extends java.util.EventObject
{
double raiseAmount_;
void setRaiseAmount(double raiseAmount){
raiseAmount_ = raiseAmount;
}
// tc
}
|