イベント処理について

通常、イベント処理には、少なくとも3つのコードが関与します。ここでは、3つのコードをA(イベント・ソース)、B(イベント・リスナー)およびC(すべてをまとめて入れるコンテナまたはその他のコード)と呼びます。

具体的に、JDeveloperでは次のようになります。

コンポーネント・エンド・ユーザーによるイベントの見方

Javaビジュアル・エディタを使用した場合、エンド・ユーザーは主にイベントを、コンポーネントが含まれるクラスで実装する必要があるイベント処理メソッドとして認識します。たとえば、エンド・ユーザーが、button1というボタンをFrame1というコンテナに置き、button1が押されたときに何かが起こるようにするとします。次の一連のアクションの発生が必要です。

  1. エンド・ユーザーが、Frame1のエディタでbutton1を選択します。
  2. ユーザーは、プロパティ・インスペクタの「イベント」ページに移動し、actionPerformedの右側をクリックします(actionPerformedは、ボタンが押されたときに生成されるイベントです)。
  3. このアクションにより、編集の可能なデフォルトのアクション・リスナー名が作成されます。名前をダブルクリックして、JDeveloperに適切なメソッドを作成するよう指示し、メソッド本体へ移動します。
  4. Frame1のソース・ビューに切り替わり、そのイベントの発生時にコールされるイベント処理メソッドがFrame1に挿入されます。デフォルトではbutton1_actionPerformed()メソッドがコールされ、メソッドの本体は最初は空です。
  5. 最後に、エンド・ユーザーは、ボタンが押された場合に応答するコードをメソッドに挿入します。

バックグラウンドでは、次のようにしてイベント・リスニングの他の側面を処理する追加のコードがFrame1.javaファイルに生成されます。

  1. JDeveloperは、ActionListenerインタフェースを実装するアクション・アダプタの匿名の内部クラスを生成します。
  2. Frame1にクラスをインスタンス化します。
  3. button1.addActionListener()をコールすることにより、自分自身をbutton1イベントのリスナーとして登録します。

このコードはすべてソース・ビューに表示されますが、開発者の主な任務は、イベント発生時にアクション・アダプタによってコールされるイベント処理メソッドを記述することです。

JDeveloperによりデフォルトで生成される特定のタイプの内部クラス・イベント・アダプタは、匿名アダプタと呼ばれます。このスタイルのアダプタは、別個の(名前付き)アダプタ・クラスを作成しません。その結果、コードは簡潔かつ的確です。

「設定」ダイアログの「Javaビジュアル・エディタ」ページから必要なオプションを選択することにより、JDeveloperでのアダプタ・クラスの生成方法を制御できます。詳細は、「標準アダプタ・クラスの使用」を参照してください。

たとえば、次のコードは、匿名アダプタを使用して、アクションが実行されたイベント用に生成されたものです。

button1.addActionListener(new java.awt.event.ActionAdapter() {
   public void actionPerformed(ActionEvent e) {
     button1_actionPerformed(e);
   }
});

void button1_actionPerformed(ActionEvent e) {
   // your code to respond to event goes here
}    

エンド・ユーザーは、プロパティ・インスペクタの「イベント」ページにリストされている、button1から発生する可能性のあるイベントをすべて参照できます。コンポーネントの作成者は、コンポーネント・クラスを、そのクラスで生成されるすべてのイベントがプロパティ・インスペクタに表示されるように作成する必要があります。エンド・ユーザーは、イベント処理メソッドのコードを記述するだけでBeanを使用できます。

上級のユーザーは、別の方法でイベントを結び付けます。たとえば、コンポーネントsrcがイベント・ソースで、コンポーネントlstnrがイベント・リスナーであり、クラスinitでsrcとlstnrがインスタンス化されている場合、ユーザーはsrc.addListener(b)をコールするコードをクラスinitに挿入できます。

JDeveloperのデフォルトのメカニズムは、次のとおりです。

  1. アダプタの匿名の内部クラスを作成し、リスナー・コンポーネントとして機能させます。
  2. コンテナ・クラスを、オブジェクトがインスタンス化され、イベント・リスナー登録およびイベント処理が実行されるサイトにします。

この単純なモデルでは、ユーザーがコンポーネント・パレットから選択するコンポーネントはイベント・ソースであればよく、イベント・リスナーである必要はありません。

標準アダプタ・クラスの使用

JDeveloperでは、内部クラスのかわりに、標準のクラス・イベント・アダプタも生成できます。

標準イベント・アダプタは、宣言されたスコープ内のすべての変数にアクセスできる匿名アダプタとは異なり、パブリックまたはパッケージ・レベルでのみアクセスできます。

たとえば、次のコードは、標準クラスを使用して、アクションが実行されたイベント用に生成されたものです。

// Registers the adapter as a listener to button1.
button1.addActionListener(new Frame1_button1_actionAdapter(this));

...
// Adapter class definition.
class Frame1_button1_actionAdapter extends java.awt.event.ActionAdapter {
  Frame 1 adaptee;
Frame1_button1_actionAdapter(Frame1 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.button1_actionPerformed(e); } } void button1_actionPerformed(ActionEvent e) { // code to respond to event goes here }

このコードを、前述のコード・サンプルと比較してください。JDeveloperでは、匿名の内部クラスを使用してコードが生成されています。アダプタを使用するどちらの方法でも、アクションが実行されたイベントを処理するコードが生成されますが、匿名アダプタを使用した方が簡潔です。

標準アダプタをプロジェクトのデフォルトにするには、次のようにします。

  1. メイン・メニューから「ツール」->「設定」を選択します。
  2. 「Javaビジュアル・エディタ」ノードを選択します。
  3. 「Javaビジュアル・エディタ」ページで、イベント処理オプションとして「標準アダプタ」を選択します。
  4. 「OK」をクリックします。

これで、イベント用に標準アダプタが(匿名の内部クラスではなく)生成されます。

コンポーネントの作成者によるイベントの見方

Beanを開発する場合、Beanが生成する必要のあるすべてのイベントについて考慮する必要があります。

コンポーネントでイベントを起動できるようにするには、次のようにします。

  1. どのような種類のイベントを起動する必要があるかを決定し、次のどちらかを実行します。
  2. 該当する既存のイベント・セットをAWTまたはJFCから選択します。

    または

    新規イベント・セットを作成します。

  3. コンポーネント用のイベント登録メソッドを作成します。
  4. イベント用のイベント通知または伝播メカニズムを作成します。

    fire<yourEventName>Event()

  5. イベントの送信先のBeanのキー・ポイントから、そのイベント起動をコールし、イベント通知メカニズムをコールします。

JavaBeansの開発
クラス・エディタを使用したイベントの作成および変更
JavaBeanのイベントのチューニング

JavaBeansについて
JavaBeansのイベントについて
JavaBeansのイベント・セットについて

 

Copyright © 1997, 2004, Oracle. All rights reserved.