• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:GridBagLayoutの使用
#navi(../)
#tags()
RIGHT:Posted by &author(aterai); at 2003-09-25
*GridBagLayoutの使用 [#b98b0be6]
Posted by [[terai]] at 2003-09-25

#contents

**概要 [#d996861b]
GridBagLayoutを使用して、左右の部品のサイズを固定、中央だけは水平方向に伸縮可になるよう配置します。

-&jnlp;
-&jar;
-&zip;

#screenshot
//#screenshot
#ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTNi4XckaI/AAAAAAAAAa8/8VJwvf6EScw/s800/GridBagLayout.png)

**サンプルコード [#zf3f0455]
#code{{
#code(link){{
public JPanel createPanel(JComponent cmp, JButton btn, String str) {
  GridBagConstraints c = new GridBagConstraints();
  JPanel panel = new JPanel(new GridBagLayout());
  
  c.gridheight = 1;
  c.gridwidth  = 1;
  c.gridy = 0;
  
  c.gridx = 0;
  c.weightx = 0.0;
  c.insets = new Insets(5, 5, 5, 0);
  c.anchor = GridBagConstraints.WEST;
  panel.add(new JLabel(str), c);
  
  c.gridx = 1;
  c.weightx = 1.0;
  //c.insets = new Insets(5, 5, 5, 0);
  c.fill = GridBagConstraints.HORIZONTAL;
  panel.add(cmp, c);
  
  c.gridx = 2;
  c.weightx = 0.0;
  c.insets = new Insets(5, 5, 5, 5);
  c.anchor = GridBagConstraints.WEST;
  panel.add(btn, c);
  
  return panel;
}
}}

**解説 [#y3ee5273]
上記のサンプルでは、GridBagLayoutでBorderLayoutのような配置を行っています。ただし、GridBagLayoutの場合は、各コンポーネントが推奨する高さが生かされるように設定しています。

-BorderLayout
--それぞれデフォルトの高さが違うコンポーネントを、BorderLayoutを使って、WEST、CENTER、EASTに配置すると、一番高いコンポーネントに揃えられる。
--CENTERのJComboBoxが、EASTのJButtonの高さになっている(スクリーンショット参照)。
--Motif Look&Feel の場合

--
//#screenshot(,screenshot1.png)
#ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTNldPsABI/AAAAAAAAAbA/eep6P-D2eC8/s800/GridBagLayout1.png)

-GridBagLayout
--左右のコンポーネントのサイズはBorderLayoutのように固定して、中央のコンポーネントだけを水平方向にのみ伸縮させる。
--weightxを指定することで、余分のスペースを各列のウェイトに比例して分配している。
--ウェイトが0の場合、余分のスペースはその列に分配されない。
--左右の列のweightxが0.0なので、中央の列のweightxは、0.001でも100.0でも水平方向の余分なスペースすべてが配分されている。
--垂直方向のスペースは指定していないため、デフォルト値のweighty=0.0となり、フレームのサイズを変更しても、垂直方向に関しては常にコンポーネントの推奨サイズで固定される。

以前は、難しいと言われていたGridBagLayoutですが、IDE(NetBeansやEclipse+VisualEditorなど)を使えば簡単に利用することができるようです。テキストエディタで使用する場合も、[[GridBagの使い方1>http://homepage1.nifty.com/masada/cyber/javagridbag1.htm]]の「紙などにマス目で下書きをしてから、コンポーネントのレイアウトを設計する」方法を使えば、凝ったレイアウトでも理解しやすく、すっきり設計できます。
以前は、難しいと言われていたGridBagLayoutですが、IDE(NetBeansやEclipse+VisualEditorなど)を使えば簡単に利用することができるようです。テキストエディタで使用する場合も、[http://homepage1.nifty.com/masada/cyber/javagridbag1.htm GridBagの使い方1]の「紙などにマス目で下書きをしてから、コンポーネントのレイアウトを設計する」方法を使えば、凝ったレイアウトでも理解しやすく、すっきり設計できます。

**参考リンク [#w19d9442]
-[[GridBagの使い方1>http://homepage1.nifty.com/masada/cyber/javagridbag1.htm]]
-[[GridBagLayoutでコンポーネントがつぶれるのを防ぎたいとき~>http://satoshi.kinokuni.org/tech/SwingTipsLayout.html#section1]]
-[http://homepage1.nifty.com/masada/cyber/javagridbag1.htm GridBagの使い方1]
-[http://satoshi.kinokuni.org/tech/SwingTipsLayout.html#section1 GridBagLayoutでコンポーネントがつぶれるのを防ぎたいとき~]
-[[GroupLayoutの使用>Swing/GroupLayout]]

**コメント [#x3c448ad]
#comment