awtコンポーネントのアクション(1)
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つの引数から知ることができます。
上の例では、どのボタンが押されたかを
渡されたボタンのラベルの文字列から判定しています。
アクション処理の例(1)