⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 model.java

📁 精通JBuilder2006 源代码 精通JBuilder2006 源代码
💻 JAVA
字号:
package chapter7.event;

import java.util.*;

/*接着定义事件源类*/
public abstract class Model {
    private Vector listeners = new Vector(); //定义了一个储存事件监听者的数组

    /*把监听者注册入listeners数组中*/
    public synchronized void addModelChangedListener(ModelChangedListener mcl) {
        listeners.addElement(mcl);
    }

    /*把监听者从listeners中注销*/
    public synchronized void removeModelChangedListener(ModelChangedListener
            mcl) {
        listeners.removeElement(mcl);
    }

    /*以上两个方法的前面均冠以synchronized,是因为运行在多线程环境时,可能有几个对象同时要进行注册和注销操作,使用synchronized来确保它们之间的同步。开发工具或程序员使用这两个方法建立源与监听者之间的事件流*/

    /*事件源使用本方法通知监听者发生了modelChanged事件*/
    protected void notifyModelChanged() {
        Vector l;
        EventObject e = new EventObject(this);
        /* 首先要把监听者拷贝到l数组中,冻结EventListeners的状态以传递事件。这样来确保在事件传递到所有监听者之前,已接收了事件的目标监听者的对应方法暂不生效*/
        synchronized (this) {
            l = (Vector) listeners.clone();
        }
        for (int i = 0; i < l.size(); i++) {
            /* 依次通知注册在监听者队列中的每个监听者发生了modelChanged事件,
                 并把事件状态对象e作为参数传递给监听者队列中的每个监听者*/
            ((ModelChangedListener) l.elementAt(i)).modelChanged(e);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -