【问题标题】:Why is the middle column not showing up?为什么中间一栏不显示?
【发布时间】:2014-05-30 06:55:14
【问题描述】:

我正在用 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 列? 不让其他按钮消失。

【问题讨论】:

  • 您可以尝试使用 3 列的 GridLayout (new GridLayout(0,3))。

标签: java swing alignment centering gridbaglayout


【解决方案1】:

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

c.gridwidth = 3;

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

使其位于“2”按钮的中心

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

label.setHorizontalAlignment(JLabel.CENTER);

【讨论】:

  • 谢谢,没有意识到我必须重置它。
【解决方案2】:

你正在使用

c.gridwidth = GridBagConstraints.REMAINDER;

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

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

阅读更多关于GridBagLayout的信息。

【讨论】:

  • 如何使标签跨越 3 列而没有网格宽度?
  • 我的 GUI 基于该链接中的示例,但它不起作用。
  • 您是否评论了以上行作为我上面的描述?
  • 是的,但是标签“我是计算器”只占用一个单元格。我希望它跨越第 0、1 和 2 列,以便它位于“2”按钮的中心
猜你喜欢
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2016-10-27
相关资源
最近更新 更多