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つのコンポーネントしか配置できないのだと思われる。
下方にステータスバーを配置した為、同じ場所である下方にツールバーを移動させることが出来ないという…。
| 上:ツールバー | ||
| 左 | 中央 | 右 |
| 下:ステータスバー | ||
そこで、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); // ステータスバーの初期化
}
〜
}
| |||||||||
| 下:ステータスバー | |||||||||