モジュール java.desktop
パッケージ java.awt

クラスAWTEventMulticaster

java.lang.Object
java.awt.AWTEventMulticaster
すべての実装されたインタフェース:
ActionListener, AdjustmentListener, ComponentListener, ContainerListener, FocusListener, HierarchyBoundsListener, HierarchyListener, InputMethodListener, ItemListener, KeyListener, MouseListener, MouseMotionListener, MouseWheelListener, TextListener, WindowFocusListener, WindowListener, WindowStateListener, EventListener

AWTEventMulticasterは、java.awt.eventパッケージで定義されたAWTイベントのための、効率的でスレッドセーフなマルチキャスト・イベント・ディスパッチを実装します。

次に、このクラスの使用例を示します。


 public myComponent extends Component {
     ActionListener actionListener = null;

     public synchronized void addActionListener(ActionListener l) {
         actionListener = AWTEventMulticaster.add(actionListener, l);
     }
     public synchronized void removeActionListener(ActionListener l) {
         actionListener = AWTEventMulticaster.remove(actionListener, l);
     }
     public void processEvent(AWTEvent e) {
         // when event occurs which causes "action" semantic
         ActionListener listener = actionListener;
         if (listener != null) {
             listener.actionPerformed(new ActionEvent());
         }
     }
 }
 
重要なのは、 addメソッドおよびremoveメソッドの最初の引数は、リスナーを保持するフィールドであるということです。 さらに、リスナーを保持するフィールドにaddメソッドおよびremoveメソッドの結果を割り当てる必要があります。

AWTEventMulticasterは、構築時に設定される EventListenersのペアとして実装されます。 AWTEventMulticasterは不変です。 addメソッドおよび removeメソッドによって、AWTEventMulticasterが変更されることはありません。 必要に応じて新規のAWTEventMulticasterが作成されます。 このように、イベント・ディスパッチの処理の間にリスナーを追加または削除しても安全です。 ただし、イベント・ディスパッチ操作の間に追加されたイベント・リスナーには、現在ディスパッチされているイベントが通知されません。

すべてのaddメソッドでnull引数を使用できます。 最初の引数がnullの場合、2番目の引数が返されます。 最初の引数がnullではなく、2番目の引数がnullの場合、最初の引数が返されます。 両方の引数がnull以外の場合は、2つの引数を使用して新規のAWTEventMulticasterが作成され、それが返されます。

2つの引数を取るremoveメソッドの場合は、次が返されます。

  • 最初の引数がnullであるか、引数が==で等しい場合は、null
  • 最初の引数がAWTEventMulticasterのインスタンスでない場合は、最初の引数。
  • remove(EventListener)メソッドで2番目の引数を指定した場合は、最初の引数に対してremove(EventListener)を呼び出した結果。

Swingでは、同様のロジックでEventListenerListを使用します。 詳細は、そちらを参照してください。

導入されたバージョン:
1.1
関連項目: