awtコンポーネントのアクション
ボタンやチェック・ボックスをユーザーが操作したら、
アプレットはそれに反応して何らかの処理を行うべきでしょう。
そのための機能は Componentクラスに既に組み込まれています。
action()という名前の関数がそれで、
コンポーネントに何かイベントが発生した時に
自動的に呼び出されます。
プログラマーは、
呼び出したい処理の内容をこの関数の中に書いておけばいいわけです。
import java.awt.*;
import java.applet.Applet;
/**
アクションの処理をテストするアプレット ActionTest クラス
*/
public class ActionTest extends Applet {
/** インターフェイスの部品の宣言 */
public Button redButton, greenButton, blueButton;
/** 初期設定の関数 */
public void init() {
redButton = new Button( "Red" ); // 赤色ボタン
redButton.setBackground( Color.red );
add( redButton );
greenButton = new Button( "Green" ); // 緑色ボタン
greenButton.setBackground( Color.green );
add( greenButton );
blueButton = new Button( "Blue" ); // 青色ボタン
blueButton.setBackground( Color.blue );
add( blueButton );
}
/** アクションの処理の関数 */
public boolean action( Event evt, Object obj ) {
String name = obj.toString(); // アクションの対象を調べる
if( name.equals("Red") ) {
setBackground( Color.red );
}
else if( name.equals("Green") ) {
setBackground( Color.green );
}
else if( name.equals("Blue") ) {
setBackground( Color.blue );
}
return true;
}
}
コンポーネントが多数ある場合には、1つの action()の
内部では処理が複雑になってしまうでしょう。
そのような場合には、独自のaction()を備えた
部品を用意することもできます。
次に示す例では、
Checkboxクラスを拡張して、
他のコンポーネントを操作する独自のアクションを備えた部品を
使った例です。
(オブジェクト指向の精神から言えば、こちらが正攻法と言えるでしょう。)
import java.awt.*;
import java.applet.Applet;
/** 他のコンポーネントの表示をコントロールする ShowControl クラス */
class ShowControl extends Checkbox {
/** コントロールを受けるコンポーネント */
Component sheep;
/** コンストラクタ */
ShowControl( String label, Component sheep ) {
super(label);
this.sheep = sheep;
}
/** 独自のアクション処理 */
public boolean action( Event evt, Object obj ) {
if( getState() ) sheep.hide();
else sheep.show();
return true;
}
}
/** アクションの処理をテストするアプレット ButtonControl クラス */
public class ButtonControl extends Applet {
/** インターフェイスの部品の宣言 */
public Button button;
public ShowControl showControl;
/** 初期設定の関数 */
public void init() {
button = new Button( "I am Controled by Anyone." );
showControl = new ShowControl( "Show/Hide", button );
add( showControl );
add( button );
}
}