我试图显示一个带有按钮的计算器,但唯一显示的是一个空的 JFrame。
我唯一能想到的是因为我正在构造函数中完成所有工作,而我的 main 只创建对象而不执行其他任何操作。但是,如果是这样的话,为什么它仍然显示一个空的 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();
}
}
最佳答案
添加所有组件之后调用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 中添加组件,例如在 ActionListener 中,您可以在添加组件后调用 revalidate()
和 repaint()
,这将还更新了 GUI。 (不要再次调用setVisible(true)
)
关于java - 为什么我的 GUI 没有显示任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445462/