イベントを追加する場合、使用可能な既存リスナーがあれば、コールバック・メソッドが このリスナーに追加されます。 その他の場合、新規リスナーが作成されます。 既存リスナーを使用するには、そのリスナーが、リスナー・インターフェースを実装する Java Bean 上の無名内部クラスでなければなりません。これはコールバック・メソッドに空のメソッド本文を持つか、 またはアダプター・クラスを拡張する必要があります。 また、追加されるイベント・ コールバックの既存のメソッドを持ちません。プロパティーについては、単一引数メソッド addPropertyChange(PropertyChangeListener リスナー) を持つ Java Bean に追加される場合、既存の PropertyChangeListener が再使用されます。 まだ、コードがない場合は、プロパティーの処理が追加されます。
コールバック・メソッドの追加先になり得る既存リスナーの候補がない場合には、新しい リスナーが作成されます。作成されるリスナーは無名インナー・クラスであり、アダプター・クラス がイベントに定義されている場合は、リスナーによってこのクラスが拡張されます。それ以外の場合には、リスナーがリスナー・インターフェースを実装します。 イベントが追加された後で、//TODO コメント付きでスタブ・メソッドが作成されます。 スタブ・メソッドは、イベントが発生したときに実行されるソース・コードのインディケーターです。 イベントが発生した場合には必要な動作を実行するように、このソース・コードを変更できます。 //TODO コメントは「タスク」ウィンドウに 表示され、不完全なメソッドにフラグを立てることができます。 これにより、後で見つけて、コールバック・ロジックを書き込んでから、//TODO コメントを削除できます。
上記の例では、windowOpened メソッドはすでに存在しています。一方、アダプターを拡張する リスナーの場合は、リスナーがまだ windowClosed メソッドを持っていないため、同じリスナー が再使用されます。windowClosed(WindowEvent e) メソッドが追加され、 メソッドのスタブと //TODO コメントも以下のように追加されます。
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent e) {
System.out.println("windowClosed()"); // TODO Auto-generated stub windowClosed()
}
public void windowOpened(java.awt.event.WindowEvent e) {
callExistingWindowOpenedLogic();
}
});
エキスパート・モードでは、上記のようにイベントを Java Bean に追加 できますが、そのイベントは Java Bean ツリーのリスナーにも追加できます。「イベント」メニューには、リスナーにあるすべてのイベント・コールバック・メソッドが表示され、すでに 使用されたものは使用不可になっています。
PropertyChangeListener については、ポップアップ・メニューに Java Bean 上のすべて のバウンド・プロパティーが表示されます。PropertyChangeListener ですでに使用されている ものは、使用不可になっています。
単一引数メソッドを追加されたリスナーには、以下のコードに示すようにそれぞれのプロパティー ・コールバックのロジックを処理する前に、プロパティー名を検査する if 文が あります。
javaBean.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent e) {
if ((e.getPropertyName().equals("font"))) {
System.out.println("propertyChange(font)");
}
}
});
これにより、(複数 if{} ブロックを使用できるようにして) 単一引数メソッドを付加した PropertyChangeListener を複数のプロパティーに使用できます。 そして、2 番目およびそれに続くプロパティー・コールバックを追加するときは、新規 if{} ブロックが追加されます。
2 つの引数メソッド addPropertyChangeListener(String propertyName、PropertyChangeListener リスナー) を使用して propertyChangeListener を Java Bean に追加する場合、これは特定のプロパティーに固有になる ため、他のプロパティーでは再使用できません。 このケースでは、すべての「イベント」カスケード・メニューの子は使用不可になっています。