Swing/ComponentList のバックアップの現在との差分(No.4)
TITLE:BoxLayoutでリスト状に並べる
BoxLayoutでリスト状に並べる
編集者:Terai Atsuhiro~
作成日:2004-03-22
更新日:2022-08-02 (火) 16:37:39
概要
- category: swing folder: ComponentList title: BoxLayoutでリスト状に並べる tags: [BoxLayout, LayoutManager] author: aterai pubdate: 2006-06-15T19:34:32+09:00 description: 高さの異なるコンポーネントをスクロールできるようにリスト状に並べます。 image:
概要
高さの異なるコンポーネントをスクロールできるようにリスト状に並べます。#screenshot
Screenshot
Advertisement
サンプルコード
#spanend
private final Box pnl = Box.createVerticalBox();
private final Vector list = new Vector();
public void addComp(JComponent c) {
list.addElement(c);
pnl.removeAll();
for(int i=0;i<list.size();i++) {
JComponent tmp = (JComponent)list.get(i);
Dimension d = tmp.getPreferredSize();
tmp.setMaximumSize(new Dimension(Integer.MAX_VALUE, d.height));
pnl.add(tmp);
}
pnl.add(Box.createVerticalGlue());
pnl.revalidate();
}
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
private final Box box = Box.createVerticalBox();
#spanend
#spanadd
private final Component glue = Box.createVerticalGlue();
#spanend
#spanadd
public void addComp(JComponent comp) {
#spanend
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() {
@Override public void run() {
comp.scrollRectToVisible(comp.getBounds());
}
});
#spanadd
}
#spanend
- &jnlp;
- &jar;
- &zip;
解説
上記のサンプルでは、Box.createVerticalBox()
で作成したBox
にコンポーネントを追加してリスト状に並べています。
解説
上記のサンプルでは、Box.createVerticalBoxを使ってリスト状に並べています。この際、各コンポーネントの高さは変化せず、幅だけフレームサイズに追従するように、JComponent#setMinimumSizeを指定しています。- 各コンポーネントの高さは変化せず幅だけフレームサイズに追従するように
JComponent#setMaximumSize(...)
を設定 - 各コンポーネントの高さの合計がフレームの高さより小さい場合は下部に余白が生成されるよう末尾に
Box.createVerticalGlue()
を追加
参考リンク
コメント
- SpringLayoutではなく、BoxLayoutを使うようにサンプルを変更しました。 -- terai
コメント
-
SpringLayout
ではなく、BoxLayout
を使うようにサンプルを変更しました。 -- aterai - 解説がソースと異なり、
setMinimumSize
となっていたのをsetMaximumSize
に修正。 -- aterai