コンポーネントのアクション処理と action()メソッド

awtコンポーネントにイベント処理を結びつける方法を説明します。 まず、イベントの伝搬を利用してアプレットの中で一括処理する例を 紹介します。
ボタンやチェック・ボックスをユーザーが操作したら、 アプレットはそれに反応して何らかの処理を行うべきでしょう。 そのための機能は Componentクラスに既に組み込まれています。 action()という名前のメソッドがそれです。 このメソッドはコンポーネントごとに決められた特定のイベントが発生すると、 自動的に呼び出されます。 プログラマーは、 呼び出したい処理の内容をこのメソッドの中に書いておけばいいわけです。
アクション処理の引き金になるイベントは コンポーネントごとに異なります。 たとえば Buttonクラスであればマウスのクリックが、 TextFieldクラスであればリターンキーの入力が、アクション処理の対象となります。 また、Panel や Appletなど Container のサブクラスのオブジェクトは、 内部のコンポーネントに発生したアクションを受け取ることができます。 Buttonなどのコンポーネントのクラスでは、action() メソッドは内容が 定義されていません。クラスの拡張を行わない限り、 単に外部のオブジェクトにアクションを伝搬するだけです。 したがって、アプレットの内部のコンポーネントに発生したアクションを アプレットの action() メソッドで処理することはしばしば行われます。 また、アプレット全体に影響を及ぼす処理の場合は、アプレット自身の action()メソッドで処理する方が自然な場合も多いでしょう。

以下にアプレット自身の action() の中で一括して処理する例を示します。 ボタンの操作で、アプレットの色を変更するプログラムです。


import java.awt.*;
import java.applet.Applet;

/** アクションの処理をテストするアプレット ActionTest クラス */

public class ActionTest extends Applet {

   /** インターフェイスの部品の宣言 */ 

      public Button redButton, greenButton;

   /** 初期設定のメソッド */

      public void init() {

           redButton = new Button( "Red" );
           redButton.setBackground( Color.red );
           add( redButton );

           greenButton = new Button( "Green" );
           greenButton.setBackground( Color.green );
           add( greenButton );
      }

   /** アクションの処理のメソッド */

      public boolean action( Event evt, Object obj ) {

           if( obj.equals("Red") ) {
               setBackground( Color.red );
           }
           else if( obj.equals("Green") ) {
               setBackground( Color.green );
           }

           return true;
      }
}

アクションの処理に必要な情報は、 Eventクラスのオブジェクト 及び Objectクラスのオブジェクト の2つの引数から知ることができます。 詳しくは下記の説明およびそれぞれのクラスの解説を参照してください。

Event および Object クラスの重要なフィールドとメソッドを 以下に説明しましょう。
Eventクラスのオブジェクトは、 イベントに関連するあらゆる情報が含まれています。 フィールドはいずれも public なので 特別なメソッドを使わなくても直接アクセスできます。
Eventクラスで良く利用される情報
フィールド名 意味
x イベント発生のX座標
y イベント発生のY座標
key キーのコード
when イベント発生のタイム・スタンプ
(秒単位の値 long型)
target イベントが発生したオブジェクト
clickCount クリックの回数
(普通のクリックなら値は1)
(ダブル・クリックなら値は2) (その他のイベントなら値は0)

Object は、あらゆるクラスの祖先となるメタ・クラスです。 このクラスが引数として登場するのは、 action()メソッドに伝えたい情報が、どんな形式のデータであるか不定だからです。 toString()メソッドで、そのオブジェクトに関する情報を 文字列で得ることができます。 Objetctとしてどんな種類のデータが返されるかは、 各クラスによって異なるので注意してください。 たとえば Button の場合はStringクラスであるラベルの文字列が返り、 Checkboxの場合は、Checkboxの状態の情報を Booleanクラスのオブジェクト として返します。 また、オブジェクトのクラスをチェックするために キーワード instanceof が利用できます。 これは Object クラスのメソッドではなく Java言語で予約された命令です。 obj instanceof String は、obj が Stringクラスのオブジェクトであるかを 判定します。 結果は boolean型の値として返されます。


アクション処理の例(1)