画面レイアウトをGridBagLayoutにする


GridLayoutはコンポーネントを升目状に配置することが出来ますが、異なる大きさのコンポーネントを配置できません。
それを可能にするのが、GridBagLayoutです。

import java.awt.*;
import javax.swing.*;
class ExamGBLayout extends JFrame {
   ExamGBLayout() {
      setTitle("GridBagLayout Sample");
      Container pane = getContentPane();
      GridBagLayout gbl = new GridBagLayout();
      pane.setLayout(gbl);
      GridBagConstraints gbc = new GridBagConstraints();
      //Label1
      JLabel label1 = new JLabel("Label1");
      gbc.gridx = 0;
      gbc.gridy = 0;
      gbl.setConstraints(label1, gbc);
      pane.add(label1);
      //Label2
      JLabel label2 = new JLabel("Label2");
      gbc.gridx = 0;
      gbc.gridy = 1;
      gbl.setConstraints(label2, gbc);
      pane.add(label2);
      //text1
      JTextField jtf1 = new JTextField(10);
      gbc.gridx = 1;
      gbc.gridy = 0;
      gbl.setConstraints(jtf1, gbc);
      pane.add(jtf1);
      //text2
      JTextField jtf2 = new JTextField(20);
      gbc.gridx = 1;
      gbc.gridy = 1;
      gbc.gridwidth = 3;
      gbc.gridheight = 1;
      gbl.setConstraints(jtf2, gbc);
      pane.add(jtf2);
   }
   public static void main(String[] args) {
      ExsamGBLayout egb = new ExsamGBLayout();
      egb.setSize(400,300);
      egb.setVisible(true);
   }
}


<実行結果>

JTextFieldのコンストラクタの引数はカラム数ですが、入力制限はしていません。
表示幅に影響します。


<GridBagConstraints > 実際にコンポーネントの位置や大きさを指定するのは、GridBagConstraintsクラスです。
GridBagConstraintsクラスの
gridx フィールド (横位置、0から)
gridy フィールド (縦位置、0から)
gridwidth フィールド (横幅)
等に値を設定し、GridBagLayoutクラスのsetConstraintsメソッドでレイアウトマネージャーに適用します。

コンポーネントの配置のバランスを変えるために、コンポーネント間の隙間をあけたサンプルはこちら