Javas GridBagLayout で問題に直面しています。
次のコードを実行します。
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Main extends JFrame{
public static void main (String [] args){
new Main();
}
public Main(){
add(getPanel());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setSize(600, 150);
}
private JPanel getPanel(){
JPanel panel = new JPanel(new GridBagLayout());
JLabel label1 = new JLabel("Label 1");
JLabel label2 = new JLabel("Label 2");
JLabel label3 = new JLabel("Label 3");
JTextField area1 = new JTextField();
JTextField area2 = new JTextField();
JComboBox<String> box = new JComboBox<String>();
box.addItem("One One One");
box.addItem("Two Two Two");
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets(10, 10, 10, 10);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 0;
panel.add(label1, gbc);
gbc.gridx = 1;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
panel.add(area1, gbc);
gbc.gridx = 2;
gbc.weightx = 0;
gbc.fill = GridBagConstraints.NONE;
panel.add(label2, gbc);
gbc.gridx = 3;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
panel.add(area2, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 0;
panel.add(label3, gbc);
gbc.weightx = 1;
gbc.gridx = 1;
panel.add(box, gbc);
return panel;
}
}
次のウィンドウを生成します。
ただし、2 つの JTextField は同じ幅にする必要があります。
JComboBox を追加しなければ、すべて問題ありません。
私の質問は、最後のコンポーネントが前のコンポーネントのグリッド幅に影響を与えるのはなぜですか? 私にとって本当に奇妙なことは、JComboBox の長さが増加すると、右側の JTextField が小さくなることです。実際には、左側の JTextField の長さが、右側の JTextField の長さ + JComboBox の長さに等しいように見えます。2 つの長さが等しい textfieldsと次の行に JComboBox を配置するトリックは何ですか?
前もって感謝します!