模块  java.desktop
软件包  javax.swing.event

Class EventListenerList

  • 实现的所有接口
    Serializable

    public class EventListenerListextends Objectimplements Serializable
    包含EventListeners列表的类。 单个实例可用于使用列表保存实例的所有侦听器(所有类型)。 使用EventListenerList提供类型安全的API(最好符合JavaBeans规范)和将事件通知方法分派给列表中适当的事件监听器的方法是该类的责任。 这个类提供的主要好处是,在没有监听器的情况下它相对便宜,并且它在一个地方提供事件监听器列表的序列化,以及一定程度的MT安全性(正确使用时)。 用法示例:假设一个人正在定义一个发送FooEvents的类,并且想要允许该类的用户注册FooListeners并在FooEvents发生时接收通知。 应将以下内容添加到类定义中:
      EventListenerList listenerList = new EventListenerList(); FooEvent fooEvent = null; public void addFooListener(FooListener l) {     listenerList.add(FooListener.class, l); } public void removeFooListener(FooListener l) {     listenerList.remove(FooListener.class, l); } // Notify all listeners that have registered interest for // notification on this event type.  The event instance // is lazily created using the parameters passed into // the fire method. protected void fireFooXXX() {     // Guaranteed to return a non-null array     Object[] listeners = listenerList.getListenerList();     // Process the listeners last to first, notifying     // those that are interested in this event     for (int i = listeners.length-2; i>=0; i-=2) {         if (listeners[i]==FooListener.class) {             // Lazily create the event:             if (fooEvent == null)                 fooEvent = new FooEvent(this);             ((FooListener)listeners[i+1]).fooXXX(fooEvent);         }     } } 
    应将foo更改为相应的名称,并将fireFooXxx更改为相应的方法名称。 FooListener接口中的每个通知方法都应该存在一个fire方法。

    警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始, java.beans软件包中添加了对所有JavaBeans java.beans长期存储的支持。 请参阅XMLEncoder

    另请参见:
    Serialized Form
    • 字段详细信息

      • listenerList

        protected transient volatile Object[] listenerList
        ListenerType列表 - 监听器对
    • 构造方法详细信息

      • EventListenerList

        public EventListenerList()
    • 方法详细信息

      • getListenerList

        public Object[] getListenerList()
        将事件侦听器列表作为ListenerType-listener对数组传回。 请注意,出于性能原因,此实现会传回内部存储侦听器数据的实际数据结构! 保证此方法传回非空数组,因此在fire方法中不需要进行空值检查。 如果当前没有侦听器,则应返回零长度的Object数组。 警告!!! 绝对不应该修改这个数组中包含的数据 - 如果需要任何这样的操作,它应该在返回的数组的副本而不是数组本身上完成。
        结果
        ListenerType-listener对的数组
      • getListeners

        public <T extends EventListener> T[] getListeners​(<T> t)
        返回给定类型的所有侦听器的数组。
        参数类型
        T - 要搜索的 EventListener的类型
        参数
        t - 要返回的 EventListener类的类型
        结果
        所有指定类型的侦听器。
        异常
        ClassCastException - 如果提供的类不可分配给EventListener
        从以下版本开始:
        1.3
      • getListenerCount

        public int getListenerCount()
        返回此侦听器列表的侦听器总数。
        结果
        侦听器总数的整数计数
      • getListenerCount

        public int getListenerCount​(<?> t)
        返回此侦听器列表提供的类型的侦听器总数。
        参数
        t - 要计数的侦听器类型
        结果
        t类型的侦听器 t
      • add

        public <T extends EventListener> void add​(<T> t,                                          T l)
        将侦听器添加为指定类型的侦听器。
        参数类型
        T - 要添加的 EventListener的类型
        参数
        t - 要添加的 EventListener类的类型
        l - 要添加的侦听器
      • remove

        public <T extends EventListener> void remove​(<T> t,                                             T l)
        将侦听器作为指定类型的侦听器删除。
        参数类型
        T - 种类 EventListener
        参数
        t - 要删除的侦听器的类型
        l - 要删除的侦听器
      • toString

        public String toString()
        返回EventListenerList的字符串表示形式。
        重写:
        toStringObject
        结果
        对象的字符串表示形式。