我在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列?不使其他按钮消失。
答案 0 :(得分:2)
如何使标签跨越3列而没有网格宽度?
c.gridwidth = 3;
在添加其他组件之前,您需要将其重置为1.
使它以'2'按钮为中心
您还需要设置标签的文本对齐方式:
label.setHorizontalAlignment(JLabel.CENTER);
答案 1 :(得分:0)
你正在使用
c.gridwidth = GridBagConstraints.REMAINDER;
其中指定当前组件是其列或行中的最后一个组件。
所以请注意这一行,它应该可以正常工作。
更多关于GridBagLayout。