GridBagLayout为什么第三列更大?

问题描述 投票:1回答:1

我试图使按钮同样宽,并且它们应该与它们上方的文本字段一样宽。码:

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;时会发生这种情况:

Screenshot

提前致谢。

java swing user-interface layout-manager gridbaglayout
1个回答
1
投票

您可以通过为按钮设置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);
  }
}

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.