awtコンポーネントのアクション

awtコンポーネントに処理を結びつける方法を説明します。


ボタンやチェック・ボックスをユーザーが操作したら、 アプレットはそれに反応して何らかの処理を行うべきでしょう。 そのための機能は Componentクラスに既に組み込まれています。 action()という名前の関数がそれで、 コンポーネントに何かイベントが発生した時に 自動的に呼び出されます。 プログラマーは、 呼び出したい処理の内容をこの関数の中に書いておけばいいわけです。
Appletクラス から作るクラスは全て 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;
      }
}

アクションの処理に必要な情報は、 Event 及び Object クラスの2つの引数から知ることができます。 上の例では、どのボタンが押されたかを Object の名前を見て判定しています。

コンポーネントが多数ある場合には、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 );
      }
}

アクション処理の例(1) アクション処理の例(2) (Netscape 2.0 で見てください)

レイアウトについてのさらに詳しい説明