GridBagLayout填充空白区域

时间:2015-05-18 19:48:04

标签: java swing layout-manager gridbaglayout

我使用 GridBagLayout 。我无法弄清楚如何拉伸 Jbuttons来填充整个面板。

我使用了以下内容:

c.fill = GridBagConstraints.BOTH;

非常感谢任何帮助。我花了很多时间寻找答案,但我找不到它。非常感谢!

以下是JFrame设置的代码。

public class Calculator extends JFrame {

JPanel panel;

private static JTextField output;

public Calculator() {

//...standard JFrame code....

    buildButtons();

    setLayout(new BorderLayout());
    output = new JTextField("0");

    add(output, BorderLayout.PAGE_START);
    add(panel, BorderLayout.CENTER);

    setVisible(true);
}

private void buildButtons() {

    panel = new JPanel(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.BOTH; 

    c.weightx = 0.5; // puts boxes between columns and walls.        

    // create button array
    JButton[] button = new JButton[24];

    //MC button
    button[0] = new JButton("MC");
    button[0].addActionListener(new randomListener());

    //MR button
    button[1] = new JButton("MR");
    button[1].addActionListener(new randomListener());

  //... the rest of the buttons...

    //#3
    button[22] = new JButton("3");
    button[22].addActionListener(new NumberListener());

    //Minus Sign
    button[23] = new JButton("-");
    button[23].addActionListener(new OperationListener());

    int row = 0;
    int col = 0;
    for (JButton button1 : button) {
        c.gridx = col;
        c.gridy = row;
        c.gridheight = 1;
        c.gridwidth = 1;
        c.insets = new Insets(1, 1, 1, 1);
        c.fill = GridBagConstraints.BOTH;

        col++;

        if (col == 5) {
            col = 0;
            row++;
        }
        panel.add(button1, c);
    }

    //Equals Sign
    JButton equalsButton = new JButton(String.valueOf("="));
    equalsButton.addActionListener(new EqualsListener());
    c.gridx = 4;
    c.gridy = 4;
    c.gridheight = 2;
    c.gridwidth = 1;
    c.insets = new Insets(1, 1, 1, 1);
    c.fill = GridBagConstraints.BOTH;
    panel.add(equalsButton, c);

    //#0
    JButton zeroButton = new JButton("0");
    zeroButton.addActionListener(new NumberListener());
    c.fill = GridBagConstraints.BOTH;
    c.gridx = 0;
    c.gridy = 5;
    c.gridwidth = 2;
    c.gridheight = 1;
    c.insets = new Insets(1, 1, 1, 1);
    panel.add(zeroButton, c);

    // dot
    JButton doxButton = new JButton(".");
    doxButton.addActionListener(new randomListener());
    c.gridx = 2;
    c.gridy = 5;
    c.gridheight = 1;
    c.gridwidth = 1;
    c.insets = new Insets(1, 1, 1, 1);
    c.fill = GridBagConstraints.BOTH;
    panel.add(doxButton, c);

    //Plus sign
    JButton plusButton = new JButton(String.valueOf("+"));
    plusButton.addActionListener(new OperationListener());
    c.gridx = 3;
    c.gridy = 5;
    c.insets = new Insets(1, 1, 1, 1);
    c.fill = GridBagConstraints.BOTH;
    panel.add(plusButton, c);
}

// Imbedded main:
public static void main(String[] args) {
    new Calculator();
}
}

2 个答案:

答案 0 :(得分:2)

设置GridBagConstraints权重,使按钮的大小按Y轴

c.weighty = 0.5;

答案 1 :(得分:1)

像这样使用GridLayout:

替换你的

panel = new JPanel(new GridBagLayout());

panel = new JPanel(new GridLayout(1, 1));

这将使您的按钮尽可能拉伸。