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

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 リスナー) メソッドを使用して、Java Bean に追加できる新規リスナーを作成できます。 この場合は、リスナーの汎用コールバック・メソッド 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)");   
             }  
          }  
      });

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


タスクの結果

イベントを追加する場合、使用可能な既存リスナーがあれば、コールバック・メソッドが このリスナーに追加されます。 その他の場合、新規リスナーが作成されます。 既存リスナーを使用するには、そのリスナーが、リスナー・インターフェースを実装する 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 に追加する場合、これは特定のプロパティーに固有になる ため、他のプロパティーでは再使用できません。 このケースでは、すべての「イベント」カスケード・メニューの子は使用不可になっています。


フィードバック