GridBagLayout と GridBagConstraints

import java.awt.*;
import java.awt.event.*;

public class Test {
	public static void main (String[] args)
	{
		Win win = new Win("Test Window");
	}
}

class Win extends Frame {
	Win (String name)
	{
					// Frameクラスのコンストラクタ(Windowのタイトルを引き渡す)
		super(name);
					// Windowの大きさ
		setSize(400, 300);
					// レイアウトの変更(水平,垂直ギャップ)
		GridBagLayout gbl = new GridBagLayout();
		setLayout(gbl);
		GridBagConstraints cs = new GridBagConstraints();
					// 1行目,2行目
		Button bt1 = new Button("ボタン1");
		Button bt2 = new Button("ボタン2");
		Button bt3 = new Button("ボタン3");
		Button bt4 = new Button("ボタン4");

		cs.weighty = 1;   // 高さ
		cs.fill       = GridBagConstraints.BOTH;   // ギャップを詰める

		cs.gridheight = 2;   // 2行にわたる
		cs.weightx    = 1.0;
		gbl.setConstraints(bt1, cs);
		add(bt1);

		cs.gridheight = 1;
		cs.weightx    = 2.0;   // 幅が他のボタンの2倍
		gbl.setConstraints(bt2, cs);
		add(bt2);

		cs.weightx   = 1.0;
		cs.gridwidth = GridBagConstraints.REMAINDER;
		gbl.setConstraints(bt3, cs);
		add(bt3);

		cs.gridwidth = GridBagConstraints.REMAINDER;
		gbl.setConstraints(bt4, cs);
		add(bt4);
					// 3行目
		Button bt5 = new Button("ボタン5");

		cs.weighty = 20.0;   // 高さが他のボタンのより高い
		gbl.setConstraints(bt5, cs);
		add(bt5);
					// 4行目(テキストエリア)
		TextArea text_a = new TextArea("Text Area", 10, 30);

		gbl.setConstraints(text_a, cs);
		add(text_a);
					// ウィンドウを表示
		setVisible(true);
					// イベントアダプタ
		addWindowListener(new WinEnd());
	}

	/******************************/
	/* 上,左,下,右の余白の設定 */
	/******************************/
	public Insets getInsets()
	{
		return new Insets(35, 10, 10, 10);
	}

	/************/
	/* 終了処理 */
	/************/
	class WinEnd extends WindowAdapter
	{
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}
}