画面レイアウトを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メソッドでレイアウトマネージャーに適用します。 |
コンポーネントの配置のバランスを変えるために、コンポーネント間の隙間をあけたサンプルはこちら。