当我在Java中使用GridBagLayout时,按钮不会填充所有可用空间

时间:2014-11-11 19:44:48

标签: java swing button layout-manager gridbaglayout

我想创建一个带有按钮排列到不可见表中的应用程序。即使我将调整框架大小,按钮也应该填充虚构单元格内的所有可用空间。我正在使用Swing,GridBagLayout。我已阅读了一些文章,解决方案是添加.weightx=1.weighty=1Weightx工作得很完美,它填补了空白但重量却没有。按钮不会延伸到细胞的高度。我的代码有问题,还是有什么东西可以解决我的问题?或者我应该使用绝对另一种布局?

public class NewClass {
  public void NewClass(){
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    frame.add(panel);
    GridBagLayout layout = new GridBagLayout();
    panel.setLayout(layout);
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;

    gbc.gridx = 0;
    gbc.gridy = 0;
    JButton B11 = new JButton("11");
    panel.add(B11,gbc);

    gbc.gridx = 1;
    gbc.gridy = 0;
    JButton B12 = new JButton("12");
    panel.add(B12,gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    JButton B21 = new JButton("21");
    panel.add(B21,gbc);

    gbc.gridx = 1;
    gbc.gridy = 1;
    JButton B22 = new JButton("22");
    panel.add(B22,gbc);

    frame.pack();
    frame.setSize(800,400);
    frame.setVisible(true);
}}

1 个答案:

答案 0 :(得分:2)

您使用了错误的GridBagConstraints#fill字段值,因为您使用的值是告诉布局管理器仅水平填充按钮。

您需要更改

  gbc.fill = GridBagConstraints.HORIZONTAL;

  // gbc.fill = GridBagConstraints.HORIZONTAL;
  gbc.fill = GridBagConstraints.BOTH;

如果您希望按钮水平和垂直填充两个方向。