固定サイズ領域と可変サイズ領域をBorderLayoutで実現

 

GUI(グラフィックユーザインタフェース)を作る際に、
悩ましいのがコンポーネントの配置、すなわち
ボタンや文字枠などのレイアウトをどうするか、です。

毎度、管理人イガジーです。

レイアウトマネージャというものを調べてみると、
BorderLayout(4辺+中央配置)、GridLayout(格子状というかタイル的配置)、
FlowLayout(詰め込み式?)くらいですから思うような配置には全く使えない
と感じると思います。でも、多少は工夫の余地があるのです。

レイアウトマネージャを使わずに、setBounds()で座標を指定するのも
ひとつの手ですが、窓(Frame)全体のサイズを変えた時に追随できません。

ラベル:[文字入力エリア=TextField][ボタン]
という様な配置で、文字入力エリアを可変サイズ(=Frameの大きさに
連動するよう)にしたいという場合は、BorderLayoutが使えます。
BorderLayout.CENTER は、全体のサイズに応じて大きさが変わります。
BorderLayout.WEST,BorderLayout.EASTなどは、addしたコンポーネントの
横幅サイズ(固定)となり、全体サイズの影響を受けません。

例として、
ラベル:[文字入力エリア=TextField][ボタン]
ラベル:[文字入力エリア=TextField      ]
         [OK][Cancel]

という感じで3行の配置をおこなってみましょう。
3行にするのは、GridLayoutを使います。
その(GridLayoutの)中にBorderLayoutを入れ子にするのです。
(一番下のボタン2つは、FlowLayoutにします)

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class GridplusBorder {
	TextField tf1,tf2;
	Button b1,b2,b3;
	GridplusBorder(){
		Frame f=new Frame();
		f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent ev) {
                System.exit(0);
            }
		});

		f.setLayout(new GridLayout(3,1));
		Panel p1=new Panel();p1.setLayout(new BorderLayout());
		Panel p2=new Panel();p2.setLayout(new BorderLayout());
		Panel p3=new Panel();

		tf1=new TextField(10);b1=new Button("Refer");
		tf2=new TextField(10);
		b2=new Button("OK"); b3=new Button("Cancel");

		p1.add(new Label("Line1:"),BorderLayout.WEST);
		p1.add(tf1,BorderLayout.CENTER);
		p1.add(b1,BorderLayout.EAST);

		p2.add(new Label("Line2:"),BorderLayout.WEST);
		p2.add(tf2,BorderLayout.CENTER);

		p3.add(b2);p3.add(b3);

		f.add(p1); f.add(p2); f.add(p3);
		f.setSize(300,130);
		f.setVisible(true);
	}
	public static void main(String[] args) {
		new GridplusBorder();
	}
}

格好良いとは言えませんが、全体(Frame)のサイズを変えた時に
TextFieldが追随するのを体験してください。
※ 上記のサンプルソースは、処理が入っていないハリボテで
ボタンを押しても何の動作もしません。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)