TITLE:GridBagLayoutを使ってレンガ状に配置

Posted by terai at 2009-03-09

GridBagLayoutを使ってレンガ状に配置

GridBagLayoutを使ってコンポーネントをレンガ状に配置します。Swing - GridBagLayout to create a boardを参考にしています。

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

JPanel panel = new JPanel(new GridBagLayout());
panel.setBorder(BorderFactory.createTitledBorder("Brick Layout"));
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
//c.weightx = 1.0; c.weighty = 0.0;
for(int i=0;i<SIZE;i++) {
  int x = i & 1; //= (i%2==0)?0:1;
  for(int j=0;j<SIZE;j++) {
    c.gridy = i;
    c.gridx = 2*j+x;
    c.gridwidth = 2;
    panel.add(new JButton(" "),c);
  }
}
//<blockquote cite="http://forums.sun.com/thread.jspa?threadID=5364641">
//<dummy-row>
c.gridwidth = 1;
c.gridy = 10;
for(c.gridx=0; c.gridx<=2*SIZE; c.gridx++)
  panel.add(Box.createHorizontalStrut(24), c);
//</dummy-row>
//</blockquote>

解説

上記のサンプルでは、GridBagLayoutを使って、JBUttonをレンガ状に配置します。互い違いに二列ずつ占めるようにボタンを配置していますが、<dummy-row>が無い場合、うまくレンガ状にはなりません。

  • 以下、Swing - GridBagLayout to create a boardのDarryl.Burkeさんの投稿を引用
    • A column (or row) in a GridBagLayout is not well defined unless there is at least one component which occupies only that column (or row). All your rows have components spanning 2 columns.
    • 列の基準となる行は、どこでも(先頭でも最後でも)構わないようです。

参考リンク

コメント