S-JIS[2007-02-07/2007-02-08] 変更履歴

ステータスバーもどき(Swing)

Swingには、ステータスバーそのものは用意されていない。
JFrame#getContentPane()の下方にそれっぽいコンポーネントを配置することで代用する。


単純なラベル

	/**
	 * ステータスバーの初期化
	 */
	private void initStatusBar(Container c) {

		JLabel bar = new JLabel("status");

		c.add(bar, BorderLayout.PAGE_END);
	}

少し複雑なステータスバー

左詰のペインを用意し、その上に必要なコンポーネントを配置する例。

	/**
	 * ステータスバーの初期化
	 */
	private void initStatusBar(Container c) {

		JPanel bar = new JPanel(new FlowLayout(FlowLayout.LEFT));
		bar.setBorder(new BevelBorder(BevelBorder.LOWERED));	//窪みの影を付ける

		bar.add(new JLabel("status"));
		bar.add(new JLabel("status2"));

		c.add(bar, BorderLayout.PAGE_END);
	}

窪みをつけたらこんな感じ↓


ツールバーとの並存

上記の方法は、引数にJFrame#getContentPane()を受け取り、そのペインの下方に配置することでステータスバーとしている。
しかし、ツールバーを同じくJFrame#getContentPane()の上方に配置し、ツールバーを再配置可能(ドラッグ&ドロップによって動的に位置を変える)にして下方に付けようとすると、うまくいかない。
(jre1.4ではステータスバーの下に隠れてしまい、出てこなくなる(爆) jre1.5では、下方に付けることが出来ない)

これはたぶん、JFrame#getContentPane()BorderLayoutのペインである為。
すなわち、ボーダーレイアウトは四方と中央にコンポーネントを配置するものであり、一方向には1つのコンポーネントしか配置できないのだと思われる。
下方にステータスバーを配置した為、同じ場所である下方にツールバーを移動させることが出来ないという…。

BorderLayout
上:ツールバー
中央
下:ステータスバー


そこで、JFrame#getContentPane()にツールバーメインとなるペインだけを乗せるようにしてやると、ツールバーを下方(かつ、ステータスバーのすぐ上)に配置することが出来るようになる。

public class HteFrame extends JFrame {
〜
	private void init() {
〜
		Container c = getContentPane();
		JPanel c2 = new JPanel(new BorderLayout());
		c.add(c2);
		initToolBar(c2);		// ツールバーの初期化
		initPane(c2);		// ペインの初期化
		initStatusBar(c);		// ステータスバーの初期化
	}
〜
}
BorderLayout×2
上:ツールバー
中央
下:ステータスバー

Swing目次へ戻る / Java目次へ戻る
メールの送信先:ひしだま