イベント処理について

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

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

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

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

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

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

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

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

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

「プロジェクト・プロパティ」ダイアログのコード・スタイル・ページから必要なオプションを選択することにより、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がイベント・リスナーであり、クラスinitsrclstnrがインスタンス化されている場合、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. 「イベント設定」グループで、イベント処理オプションとして「標準アダプタ」を選択します。
  4. 「OK」を選択します。

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

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

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

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

  1. どのような種類のイベントを起動する必要があるかを決定し、次のどちらかを実行します。

    該当する既存のイベント・セットをAWTまたはJFCから選択します。

    または

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

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

    fire<yourEventName>Event()

  4. 起動されたイベントを、Bean内でイベント送信を必要とする主要なポイントからコールし、イベント通知メカニズムをコールします。

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

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