Processing依存からの脱却−AWTでのGUIプログラミング(2)

 前回、っていうかついさっきの記事なのですが、本を読んでると、実際には「Frameのインスタンスを作って表示する」ということはほとんどないようです。
 ウィンドウの中には、そのプログラムを動かすためのボタンやテキストエリアなどを書いていかなければなりません。Frameは何もないウィンドウを表示させるためのクラスであり、それを継承させたクラスを作って、そこにプログラムを動かすための要素を組み込んでいったほうが便利なのです。

package jp.afeq

import java.awt.*;

public class Main extends Frame{
  Main(){
    super();
    this.setSize(200,100);
    this.setVisible(true);
  }

  public static void main(String[] args){
    new Main();
  }
}

 これが、Frameを継承させて作ったプログラムです。

 では、次のようなコードを実行してみましょう。

package jp.afeq;

import java.awt.*;

public class Main extends Frame {

	public Main(){
		super();
		this.setSize(300, 200);
		Label lc = new Label("Center");
		Label lr = new Label("Right");
		Label lb = new Label("Bottom");
		Label ll = new Label("Left");
		Label lt = new Label("Top");
		this.add(lc, BorderLayout.CENTER);
		this.add(lr, BorderLayout.WEST);
		this.add(lb, BorderLayout.SOUTH);
		this.add(ll, BorderLayout.EAST);
		this.add(lt, BorderLayout.NORTH);
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new Main();
	}
}

 実行結果は下の画像のようになります。

 ここでLabelとはテキストが入っているコンポーネントです。また、「コンポーネントを中に組み込むことができるコンポーネント」のことをコンテナといいます。ここではMainのことです。ここで、lcやlrはそれぞれ"Center"と"Right"という文字が入っています。

Label lc = new Label("Center");
Label lr = new Label("Right");
Label lb = new Label("Bottom");
Label ll = new Label("Left");
Label lt = new Label("Top");

 それを実際ウィンドウに組み込んで、表示するのが次の部分です。

this.add(lc, BorderLayout.CENTER);
this.add(lr, BorderLayout.WEST);
this.add(lb, BorderLayout.SOUTH);
this.add(ll, BorderLayout.EAST);
this.add(lt, BorderLayout.NORTH);

thisとは、「このインスタンス自身」のことで、Mainにあるaddという関数を呼び出します。BorderLayoutはコンテナに定義されているレイアウトマネージャで、表示位置を決めることができます。具体的にはコンテナを上下左右中央に分けて、どこに組み込むかを決めてレイアウトするというものです。さて、add関数についてみてみましょう。これはコードを見れば分かるように、

コンテナ.add(コンポーネント,BorderLayoutフィールド)

という形になっています。BorderLayoutフィールドはコンテナを地図に見立てて、北=上、南=下、東=右、西=左、と決められています。次のようなものがあります。

ちなみに、コンポーネントのテキストを弄くるためのメソッドとして、次のようなものが定義されています

コンポーネント.setText(String);

コンポーネント.getText();

が定義されているようです。