GridBagLayout 为什么第三列更大?

GridBagLayout why is the third column bigger?

我正在尝试使按钮宽度相同,并且它们一起应该与它们上方的 JTextField 一样宽。 代码:

window.setLayout(new GridBagLayout());
GridBagConstraints gb = new GridBagConstraints();

gb.gridx = 0;
gb.gridy = 0;
gb.gridwidth = 3;
gb.fill = GridBagConstraints.HORIZONTAL;
gb.gridwidth = GridBagConstraints.REMAINDER;
window.add(text,gb); //adds JTextField

gb.gridwidth = 1;
gb.gridy++;
window.add(one,gb); //adds JButton
gb.gridx++;
window.add(two,gb); //adds JButton
gb.gridx++;
window.add(three,gb); //adds JButton

当我使用 gb.gridwidth = GridBagConstriants.RELATIVE; 时,会发生这种情况:

提前致谢。

您可以通过为按钮设置 GridBagConstraints.weightx = 1.0 来实现。

另一个需要注意的关键是我已将文本字段和按钮添加到 JPanel,然后将 JPanel 添加到 JFrame 的内容窗格。我没有将文本字段和按钮直接添加到内容窗格。

import javax.swing.*;
import java.awt.*;

public class EqualWidthButtons
{
  public static void main(String[] args)
  {
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());

    GridBagConstraints gb = new GridBagConstraints();
    gb.gridx = 0;
    gb.gridy = 0;
    gb.gridwidth = 3;
    gb.fill = GridBagConstraints.HORIZONTAL;
    panel.add(new JTextField(20), gb);

    gb.gridwidth = 1;
    gb.gridy++;
    gb.weightx = 1.0; // This is the important line
    panel.add(new JButton("1"), gb);

    gb.gridx++;
    panel.add(new JButton("2"), gb);

    gb.gridx++;
    panel.add(new JButton("3"), gb);

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new GridBagLayout());
    frame.getContentPane().add(panel, new GridBagConstraints());
    frame.setBounds(300, 200, 400, 300);
    frame.setVisible(true);
  }
}

输出: