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

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

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

      これにより、単一引数メソッドを使用して追加された PropertyChangeListener を (複数の if{} ブロックを使用することにより) 複数のプロパティーで使用できます。

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

関連概念
イベント、リスナー、およびアダプター・クラス
「Java Bean」ビュー
関連タスク
コンポーネントのイベントの表示
コンポーネントからのイベントの削除
イベントのソースの表示

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