- java.lang.Object
-
- javax.swing.event.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
-
-
Field Summary
Fields Modifier and Type Field 描述 protected Object[]
listenerList
ListenerType - Listener对的列表
-
构造方法摘要
构造方法 Constructor 描述 EventListenerList()
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 <T extends EventListener>
voidadd(Class<T> t, T l)
将侦听器添加为指定类型的侦听器。int
getListenerCount()
返回此侦听器列表的侦听器总数。int
getListenerCount(Class<?> t)
返回此侦听器列表提供的类型的侦听器总数。Object[]
getListenerList()
将事件侦听器列表作为ListenerType侦听器对的数组传回。<T extends EventListener>
T[]getListeners(Class<T> t)
返回给定类型的所有侦听器的数组。<T extends EventListener>
voidremove(Class<T> t, T l)
将侦听器作为指定类型的侦听器删除。String
toString()
返回EventListenerList的字符串表示形式。
-
-
-
字段详细信息
-
listenerList
protected transient Object[] listenerList
ListenerType - Listener对的列表
-
-
方法详细信息
-
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
- 要删除的侦听器
-
-