SMACS

smacs.util
Class CreateListenerList

java.lang.Object
  extended byjavax.swing.event.EventListenerList
      extended bysmacs.util.CreateListenerList
All Implemented Interfaces:
Serializable

public class CreateListenerList
extends EventListenerList

Lightweight List of CreateListener objects.

This class is very very similar to EventListenerList list but it does add its listener objects to the end instead of the head. That makes it so all listeners are called in the order added.

Here is the documentation as can be seen in EventListenerList:

A class that holds a list of CreateListeners. A single instance can be used to hold all listeners (of all types) for the instance using the list. It is the responsiblity of the class using the CreateListenerList to provide type-safe API (preferably conforming to the JavaBeans spec) and methods which dispatch event notification methods to appropriate Create Listeners on the list. The main benefits that this class provides are that it is relatively cheap in the case of no listeners, and it provides serialization for event-listener lists in a single place, as well as a degree of MT safety (when used correctly). Usage example: Say one is defining a class that sends out FooCreate, and one wants to allow users of the class to register FooListeners and receive notification when FooCreate occurs. The following should be added to the class definition:

 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 first to last, notifying
     // those that are interested in this create chain.
     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 should be changed to the appropriate name, and fireFooXxx to the appropriate method name. One fire method should exist for each notification method in the FooListener interface.

Warning: this class is dependent on the EventListenerList from Swing of JDK 1.4

Author:
Guido Draheim [guidod@gmx.de]
See Also:
EventListenerList, Serialized Form

Field Summary
 
Fields inherited from class javax.swing.event.EventListenerList
listenerList
 
Constructor Summary
CreateListenerList()
           
 
Method Summary
 void add(Class t, CreateListener l)
          add to tail of list.
 void add(Class t, EventListener l)
          add to head of list.
 
Methods inherited from class javax.swing.event.EventListenerList
getListenerCount, getListenerCount, getListenerList, getListeners, remove, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CreateListenerList

public CreateListenerList()
Method Detail

add

public void add(Class t,
                EventListener l)
add to head of list. This method has been made "protected" as we want to handle CreateListener objects instead - being called first-to-last. Actually, we checked the argument for instanceof "CreateListener" and then call the specific add-functions. If it is not of an actual CreateListener type then we will ignore the listener.

Parameters:
t - - the type of the listener to be added
l - - the listener to be added

add

public void add(Class t,
                CreateListener l)
add to tail of list. Other than original EvenListerList functionality, the actual CreateListener objects is pushed as the last element of the list. Any listener not of the specified Class type will be ignored.

Parameters:
t - - the type of the listener to be added
l - - the listener to be added

SMACS