Posted by terai at 2004-03-22
BoxLayoutでリスト状に並べる
高さの異なるコンポーネントをスクロールできるようにリスト状に並べます。
サンプルコード
private final Box box = Box.createVerticalBox();
private final Component glue = Box.createVerticalGlue();
public void addComp(final JComponent comp) {
comp.setMaximumSize(new Dimension(
Short.MAX_VALUE, comp.getPreferredSize().height));
box.remove(glue);
box.add(Box.createVerticalStrut(5));
box.add(comp);
box.add(glue);
box.revalidate();
EventQueue.invokeLater(new Runnable() {
public void run() {
comp.scrollRectToVisible(comp.getBounds());
}
});
}
解説
上記のサンプルでは、Box.createVerticalBoxを使ってリスト状に並べています。この際、各コンポーネントの高さは変化せず、幅だけフレームサイズに追従するように、JComponent#setMaximumSizeを設定しています。
コンポーネントの高さの合計がフレームの高さより小さい場合は、下部に余白が出来るように、最後にBox.createVerticalGlueを追加しています。
コメント
- SpringLayoutではなく、BoxLayoutを使うようにサンプルを変更しました。 -- terai 2006-06-26 (月) 15:34:41
- 解説がソースと異なり、setMinimumSizeとなっていたのをsetMaximumSizeに修正。 -- terai 2009-05-15 (金) 22:58:16