我正在尝试使用按钮显示计算器,但唯一显示的是空JFrame。
我能想到的唯一一件事是因为我在构造函数中完成了所有工作,并且我的主要只创建了对象而没有做任何其他事情。但是,如果是这种情况,为什么它仍然会显示一个空的GUI而不是什么?或者我只是完全错了?
import java.awt.GridLayout;
import java.awt.TextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
public class MyFrame extends JFrame{
private GridLayout grid;
private final String ADD = "+";
private final String SUB = "-";
private final String MULT = "*";
private final String DIV = "/";
private final String CLR = "C";
private final String EQ = "=";
private TextField textOnScreen;
private final String[] buttonValues= {
"7", "8", "9", ADD,
"4", "5", "6", SUB,
"1", "2", "3", MULT,
"0", CLR, EQ, DIV
};
MyFrame(){
super("Calculator");
JPanel p = new JPanel();
grid = new GridLayout(4, 4, 3, 3);//row, col, hor gap, vert gap
p.setLayout(grid);
setSize(400, 500);
setResizable(true);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//create buttons
for(int i = 0; i < buttonValues.length; i++){
p.add(new JButton(buttonValues[i]));
}
add(p);
}
public static void main(String[] args){
MyFrame f = new MyFrame();
}
}
答案 0 :(得分:7)
在添加所有组件后调用setVisible(true)
MyFrame(){
super("Calculator");
JPanel p = new JPanel();
grid = new GridLayout(4, 4, 3, 3);//row, col, hor gap, vert gap
p.setLayout(grid);
setSize(400, 500);
setResizable(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//create buttons
for(int i = 0; i < buttonValues.length; i++){
p.add(new JButton(buttonValues[i]));
}
add(p);
setVisible(true);
}
为了进一步理解,如果要在ActionListener中添加组件,可以在添加组件后调用revalidate()
和repaint()
,这也将更新GUI。 (不要再打电话给setVisible(true)
)