Module  java.desktop
软件包  javax.swing.event

Class EventListenerList

  • All Implemented Interfaces:
    Serializable


    public class EventListenerList
    extends Object
    implements Serializable
    一个持有EventListener列表的类。 单个实例可用于使用列表来容纳所有实例的所有侦听器(所有类型的所有类型)。 使用EventListenerList的类的责任是提供类型安全的API(最好符合JavaBeans规范)以及将事件通知方法分配给列表中适当的事件侦听器的方法。 这个类提供的主要好处是它在没有听众的情况下相对便宜,并且在一个地方提供了事件监听器列表的序列化,以及一定程度的MT安全性(正确使用时)。 使用示例:说一个是定义一个发送FooEvents的类,并且想要允许该类的用户注册FooListeners并在FooEvent发生时接收通知。 应将以下内容添加到类定义中:
      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接口中的每个通知方法,都应该存在一种方法。

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

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

      • listenerList

        protected transient Object[] listenerList
        ListenerType - Listener对的列表
    • 构造方法详细信息

      • EventListenerList

        public EventListenerList​()
    • 方法详细信息

      • getListenerList

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

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

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

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

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

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

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