awtコンポーネントの利用(1)

awtコンポーネントをアプレットに組み込む方法を説明します。 まずは、どうすればアプレットの中に配置できるかです。


JDK βバージョンの画期的な改善は、 awtコンポーネントをアプレット内部に置くことができるようになった点でしょう。
awtコンポーネントとは、ボタンやテキスト入力用のアイテムのように ユーザー・インターフェイスのための部品のクラスです。 (Xウィンドウのツール・キットやTCL/TK を知っている人ならば お馴染みのものです。) これらの部品を利用すれば、 アプレットの開発の効率が格段に向上します。 また、HTML の CGI の機能に代わるものを Java言語のアプレットによって実現するのも容易です。
実は JDK のαバージョンにも awtコンポーネントは用意されていたのですが、 アプレットの内部に自由に置くことができませんでした。 Apletクラスがそのように設計されていなかったのです。 βバージョンでは Applet クラスは、それ自身が awtコンポーネントである Panel クラスの サブ・クラスとして実現されています。 Panel は内部に awtコンポーネントを配置する機能を備えたクラスですから、 Applet も(そして、それを拡張したサブ・クラスでも) 内部に awtコンポーネントを置くことができるようになりました。

awtコンポーネントのクラスは、 独自のパッケージを構成する Appletを除いて、 awtパッケージの中にまとめられています。 このパッケージには Graphics や Image などグラフィック関連の重要な クラスも含まれていますが、 コンポーネントのクラスは全て Componentクラスを先祖とします。
Component のサブ・クラスは大まかに2種類に分類できます。 直接インターフェイスを担当する部品となるクラス(Button など)と、 それらをレイアウトする土台の役割をするクラス (Panel や Appletが典型例)です。 この土台となるクラスは Component のサブ・クラス Container を先祖とします。

実際のプログラムで見てみましょう。 ボタンやテキスト入力のアイテムを内部に含むアプレットの例です。 (以下の例では表示されるだけです。 特定の処理に結びついてはいない点に注意)



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

/** awtコンポーネントを含むアプレット PanelTest クラス */

public class PanelTest extends Applet {

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

      public Button button;
      public TextField textFild;

   /** 初期設定の処理 */

      public void init() {

          button = new Button("Push!");  // プッシュボタンを生成
          add( button );                 // プッシュボタンを追加
          textField = new TextField(32); // 入力アイテムを生成
          add( textField );              // 入力アイテムを追加
      }
}

awtコンポーネントの生成は、それぞれのクラスのコンストラクタを 呼び出すだけです。 引数の与え方は一通りに限定されてはいないのが普通です。 典型的な例を挙げると、上のように Button ならラベルの文字列を、 TextField ならコラム数(表示できる文字数)を与えることができます。 部品のサイズなどは与えられたデータを基に、 自動的に調整されます。
生成されたコンポーネントは add() でアプレット内に 追加され、自動的にレイアウトされます。 デフォルトのレイアウト方式はFlowLayoutで、 文章をレイアウトするのと同じように左から右に順に並べていき、 収まりきらない時は下へ移ります。 レイアウトのポリシーは、設定し直すこともできます。 (そのためにはレイアウトの方式を示すクラス(!)を生成する必要があります。)
また、Panelクラスも Componentクラスのサブ・クラスです。 したがって、アプレットの中に Panelクラスのオブジェクトを レイアウトすることで、階層的な構造を何重にも作ることが可能です。 多数の部品をグループごとに分けてきれいにレイアウトしたい時に 有効な方法です。

インターフェイスの部品となるComponentのサブ・クラス
クラス名 機能
Button プッシュ・ボタン
Canvas 描画可能な領域
CheckBox 単独でトグル・ボタン
グループ化して選択ボタン
Choice メニュー・ボタン
Label 文字列を表示する
List スクローリング・リスト
TextArea 複数行のキー入力アイテム
TextField キー入力アイテム


awtコンポーネントの使用例 (Netscape 2.0 で見てください)

コンポーネントのデザインの指定法

コンポーネントに処理を設定する方法

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