TITLE:BoxLayoutでリスト状に並べる

Usage: #tags(tags)
Posted by at 2004-03-22

BoxLayoutでリスト状に並べる

高さの異なるコンポーネントをスクロールできるようにリスト状に並べます。

  • &jnlp;
  • &jar;
  • &zip;
ComponentList.png

サンプルコード

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());
    }
  });
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、Box.createVerticalBoxを使ってリスト状に並べています。この際、各コンポーネントの高さは変化せず、幅だけフレームサイズに追従するように、JComponent#setMaximumSizeを設定しています。

コンポーネントの高さの合計がフレームの高さより小さい場合は、下部に余白が出来るように、最後にBox.createVerticalGlueを追加しています。

コメント

  • SpringLayoutではなく、BoxLayoutを使うようにサンプルを変更しました。 -- aterai
  • 解説がソースと異なり、setMinimumSizeとなっていたのをsetMaximumSizeに修正。 -- aterai