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); // ステータスバーの初期化
}
〜
}
| |||||||||
下:ステータスバー |