nullのレイアウト


Zオーダー

通常、Java言語でコンテナの上にコンポーネントを配置する場合
すでに用意されたレイアウトマネージャに、サイズや配置を任せます
コンテナのサイズ変更に柔軟に対応することができるたに、重要な機能でした

しかし、レイアウトマネージャを使わず手動でコンポーネントを配置することもできます
これにはnullのレイアウトマネージャを使用します
レイアウトマネージャを使用しない場合は、自分でコンポーネントのサイズや位置を設定します
当然ですが、コンポーネントのサイズ変更には対応できません

このことから、非プラットフォーム依存であるJavaにとって、あまり利点はありません
Java言語は、レイアウトのアルゴリズムを定義して、それをクラスにカプセル化するという
非常に汎用的な手法があることを忘れないでくださいね(これを ストラテジパターン と呼びます)

ただし、nullのレイアウトマネージャーにも適切な利用方法があります
まず、nullのレイアウトマネージャーを設定する場合は setLayout() メソッドでnullを指定
コンテナに追加したコンポーネントは必ずsetSize() と setLocation() を設定します
import java.applet.Applet;
import java.awt.*;

/*	<applet code="App64.class" width="300"height="300">
 	</applet>
*/

public class App64 extends Applet {
	public void init() {
		setLayout(null);
		setBackground(Color.white);
		Button but[] = new Button[5];
		for(int i = 0 , d = 10 ; i < 5 ; i++) {
			but[i] = new Button("Kitty " + i);
			but[i].setLocation(d , d);
			but[i].setSize(100 , 25);
			add(but[i]);
			d += 10;
		}
	}
}
アプレット

ボタンをレイアウトマネージャなしに、自分で配置したアプレットです
上のアプレットは、コンポーネント同士が重なりあっているのが特徴ですね

このようなコンポーネントの重なる順序をZオーダーと言います
ZオーダーはAWT1.1以降から保証されています
AWT1.1以降では、必ず最初のコンポーネントを手前に、あとに追加されたコンポーネントを後ろにします
それ以前のバージョンでは、重なる順序(Zオーダー)は保証されません

nullのレイアウトマネージャは、カスタムコンポーネントなどのオブジェクトをランダムに配置したり
それをD&Dで移動させたりするプログラムに適切と言えますが
通常のコンポーネントの配置をレイアウトマネージャを使わないで行うのは間違いとされます

setSize()メソッドと、setLocation()メソッドの両方の機能を持つ
setBounds()メソッドというのも、Componentクラスに用意されています
上のアプレットのような処理の場合は、こちらを使ったほうが早いですね

public void setBounds( int x, int y, int width, int height )
public void setBounds( Rectangle r )

xとyには、コンポーネントの開始座標を
widthとheightには、コンポーネントの横と高さのサイズを指定します

rにはコンポーネントの境界を表す長方形を指すRectangleオブジェクトを渡します
import java.applet.Applet;
import java.awt.*;

/*	<applet code="test.class" width="300"height="300">
 	</applet>
*/

public class test extends Applet {
	public void init() {
		setLayout(null);
		setBackground(Color.white);
		Button but[] = new Button[5];
		for(int i = 0 , d = 10 ; i < 5 ; i++) {
			but[i] = new Button("Kitty " + i);
			but[i].setBounds(d , d , 100 , 30);
			add(but[i]);
			d += 10;
		}
	}
}



前のページへ戻る次のページへ