为什么中间列没有出现?

时间:2014-04-15 18:43:18

标签: java swing alignment centering gridbaglayout

我在Java中创建一个简单的计算器GUI,开始学习如何使用Java。以下代码无效。只出现第一列。第二和第三列在哪里?

    package Start;


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

    public class CalculatorGUI {

public static void addComponentsToPane(Container pane) {

    pane.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;

    JLabel label;
    JButton button;

    label = new JLabel("I'm a calculator");
    c.gridwidth = GridBagConstraints.REMAINDER;
    c.weightx = 0.0;
    c.gridx = 0;
    c.gridy = 0;
    pane.add(label, c);

    button = new JButton("1");
    c.gridx = 0;
    c.gridy = 1;
    pane.add(button, c);

    button = new JButton("2");
    c.gridx = 1;
    c.gridy = 1;
    pane.add(button, c);

    button = new JButton("3");
    c.gridx = 2;
    c.gridy = 1;
    pane.add(button, c);

    button = new JButton("4");
    c.gridx = 0;
    c.gridy = 2;
    pane.add(button, c);

    button = new JButton("5");
    c.gridx = 1;
    c.gridy = 2;
    pane.add(button, c);

    button = new JButton("6");
    c.gridx = 2;
    c.gridy = 2;
    pane.add(button, c);

    button = new JButton("7");
    c.gridx = 0;
    c.gridy = 3;
    pane.add(button, c);

    button = new JButton("8");
    c.gridx = 1;
    c.gridy = 3;
    pane.add(button, c);

    button = new JButton("9");
    c.gridx = 2;
    c.gridy = 3;
    pane.add(button, c);


}

public static void createAndShowGUI() {
    JFrame frame = new JFrame("CalculatorGUI");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   addComponentsToPane(frame.getContentPane());

    frame.pack();
    frame.setVisible(true);
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
  }
}

我试着让标签只说c.gridwidth = 3;,但这也是一样的。当我使宽度等于1时,所有按钮都会出现,但标签只在一个单元格中。 如何使标签跨越3列?不使其他按钮消失。

2 个答案:

答案 0 :(得分:2)

  

如何使标签跨越3列而没有网格宽度?

c.gridwidth = 3;

在添加其他组件之前,您需要将其重置为1.

  

使它以'2'按钮为中心

您还需要设置标签的文本对齐方式:

label.setHorizontalAlignment(JLabel.CENTER);

答案 1 :(得分:0)

你正在使用

c.gridwidth = GridBagConstraints.REMAINDER;

其中指定当前组件是其列或行中的最后一个组件。

所以请注意这一行,它应该可以正常工作。

更多关于GridBagLayout