コンポーネントへのイベントの追加

「設計」ビューまたは「Java Bean」ビューのコンポーネントに 1 つのイベントを追加できます。

イベントをコンポーネントに追加する方法は、以下のとおりです。
  1. 「Java Bean」ビューまたは「設計」ビューの コンポーネントを右マウス・ボタンでクリックします。
  2. ポップアップ・メニューから、 「イベント」をクリックします。 ポップアップ・ メニューには、コンポーネントの優先イベントが表示されます。次のステップのいずれかを行います。
    • コンポーネントの優先イベントの 1 つをクリックします。そのイベントが コンポーネントに追加されます。例えば、JFrame に対する優先イベントは、windowClosed および windowOpened です。
    • 「イベントの追加」をクリックして、「イベントの 追加」ウィンドウを開きます。
  3. 「イベントの追加」ウィンドウを開くと、分類された イベントのリストが表示されて、そこから選択することができます。追加するイベントを選択して、 「終了」をクリックします。
    • 「イベントの追加」ダイアログでは、 コンポーネントで使用可能なすべてのイベントがツリーに表示 されます。このツリーではイベント・リスナーがエントリーの第 1 レベルとして表示され、 それぞれのリスナー・エントリーの下に、イベントが発生する可能性のあるコールバックがあります。
      「イベントの追加」ダイアログ
    • ダイアログを使用して、新規リスナーを生成するか既存のリスナーを使用するかを指定することができます。 ダイアログが開くと、既存リスナーが分析されます。再使用可能 であると見なされたリスナーは、別のアイコンで表示されます。 既存リスナーがアダプター・クラスを拡張する場合は イベント表示クラスが、 それ以外の場合は イベント表示 が 表示されます。 リスナー自体の内部では、既存のイベントは緑色の 矢印 緑色の矢印 で示され、 使用可能なイベントは不完全な矢印 非イベント で示されます。
    • 既存リスナーを使用する、または新規リスナーを作成することを指定できます。 新規リスナーが作成されると、アダプター・クラスを拡張するか、リスナー・インターフェース を実装するかを選択できます。オプションを選択できない場合は、ラジオ・ボタンが使用不可 になります。例えば、既存リスナーが存在しない、あるいは既存リスナーが選択されている が、その選択されたイベントがすでに使用されている場合、「既存の リスナーの使用」が使用不可になります。新規リスナーに使用可能なアダプター・ クラスが存在しない場合、「拡張: ADAPTER_CLASS_NAME (extends: ADAPTER_CLASS_NAME)」ラジオ・ボタンは使用不可になります。
    • 「イベントの追加」ダイアログで「propertyChange」を選択した場合、コールバックの 追加に関するオプションが追加されます。addPropertyChange(PropertyChangeListener リスナー) メソッドを使用して、JavaBean に追加できる新規リスナーを作成できます。 この場合は、リスナーの汎用コールバック・メソッド propertyChange(PropertyChangeEvent イベント) がすべてのプロパティー・イベントに使用されます。一部の JavaBean (例えば、Swing コンポーネント) では、2 つの引き数メソッド addPropertyChange(String propertyName、PropertyChangeListener リスナー) が使用可能であり、新規リスナーを使用するときにデフォルトで選択されます。

      「イベントの追加」ダイアログ

      2 つの引き数メソッドを使用して追加されるリスナーは、 特定のプロパティーに特有であるため、他のプロパティーには再使用できません。 単一引き数メソッドを使用して追加されたリスナーには、以下のコードに示すように、 それぞれのプロパティー・コールバックのロジックを処理する前にプロパティー名を検査する 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 を、複数のプロパティーに使用することができます。

イベントを追加する場合、使用可能な既存リスナーがあれば、コールバック・メソッドが このリスナーに追加されます。 使用可能な既存リスナーがない場合は、新規リスナーが作成されます。 既存リスナーを使用するには、そのリスナーが、リスナー・インターフェースを実装する JavaBean 上の無名内部クラスでなければなりません。 これはコールバック・メソッドに空のメソッド本文を持つか、 またはアダプター・クラスを拡張する必要があります。 また、追加されるイベント・ コールバックの既存のメソッドを持ちません。プロパティーについては、単一引き数メソッド addPropertyChange(PropertyChangeListener リスナー) を持つ JavaBean に追加される場合、既存の 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();      
            }  
});

エキスパート・モードでは、上記のようにイベントを JavaBean に追加 できますが、そのイベントは Java Bean ツリーのリスナーにも追加できます。 「イベント」メニューには、リスナーにあるすべてのイベント・コールバック・メソッドが表示され、すでに 使用されたものは使用不可になっています。

閉じている「追加」ウィンドウ

PropertyChangeListener については、ポップアップ・メニューに JavaBean 上のすべて のバウンド・プロパティーが表示されます。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 を JavaBean に追加する場合、これは特定のプロパティーに固有になる ため、他のプロパティーでは再使用できません。 このケースでは、すべての「イベント」カスケード・メニューの子は使用不可になっています。

親トピック: Visual Editor を使用したイベントの処理

関連概念
「Java Bean」ビュー

関連タスク
コンポーネントからのイベントの削除
コンポーネントのイベントの表示
イベントのソースの表示

(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved.