アクション処理を外部のコンポーネントに伝搬するかどうかは、
そのコンポーネントの action() メソッドの返値によって判定されます。
Componentクラスの action()メソッドの定義は、ほとんど空でが、
正確に言うと
return false; の一行があります。
action()メソッドがこのデフォルトの内容しか含まない時は、
アクションの処理はコンポーネントの外側の親のオブジェクトに伝えられます。
Buttonクラスのオブジェクトのアクションを
アプレットの action() メソッドで一括して
処理できたのは、この仕組みのおかげです。
逆に
action()メソッドを独自に処理できるようにして、外部にアクションを伝搬する
必要がない場合には、メソッドの返値は true にしてください。
こうすると、外部のコンポーネント(たとえば
アプレット)の action() メソッドが不必要に呼び出されなくなります。
もちろん、コンポーネントの内部と外部の両方の action() メソッドで
処理を行ってもかまいません。
コンポーネント自身の action()メソッドで入力のエラーチェックを行い、
アプレットの action() の中でそのデータを処理するようなこともできるわけです。

action()メソッドの変値でイベントの伝搬がコントロールされる。
アクションの処理に必要な情報は、2つの引数である
Event 及び Object クラスのオブジェクトから得ることができます。
たとえば
前節のサンプル
では、どのボタンが押されたかを Object
から文字列の情報を取り出して判定しています。
Event および Object クラスのデータと、それに関連するメソッドを
以下に説明しましょう。
Eventクラスのオブジェクトは、
イベントに関連するあらゆる情報が含まれています。
変数はいずれも public なので特別なメソッドを使わなくても直接アクセスできます。
| 変数名 | 意味 |
|---|---|
| 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型の値として返されます。