モジュール java.desktop
パッケージ javax.swing.event

クラスEventListenerList

java.lang.Object
javax.swing.event.EventListenerList
すべての実装されたインタフェース:
Serializable

public class EventListenerList extends Object implements Serializable
EventListenerのリストを格納するクラスです。 1つのインスタンスを使用して、このリストを使用しているインスタンスの(すべてのタイプの)すべてのリスナーを格納できます。 EventListenerListを使用して、タイプ・セーフAPI (JavaBeans仕様に準拠することが望ましい)と、リスト上の適切なイベント・リスナーにイベント通知メソッドをディスパッチするメソッドを提供するのは、クラスの役割です。 このクラスで得られる主な利点は、リスナーが存在しない場合に比較的安価であり、単一の場所におけるイベント・リスナー・リストのシリアル化、およびある程度のMT安全性(正常な使用時)が実現されることです。 使用例: たとえば、FooEventを送出するクラスを定義して、そのクラスのユーザーがFooListenerを登録し、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を参照してください。