前些日子刚学完Java的图形界面,想写个小计算器练练手。结果出现了一个问题,就是每次运行时界面都是空的,当放大或者缩小以后界面才会出来。。。查了资料后发现原来是setVisible的位置问题。setVisible(true)要放到控件前面的话会先刷新出页面,结果就是后面的控件显示不出来。因此要把setVisible(true)放到构造函数的最后面。
改进前
public MyCalculateFrame()
{
//设置Frame的属性
setTitle("calculator");
setSize(300,400);
this.setLocation(700, 350);
setVisible(true);
//创建容器
Container container = this.getContentPane();
container.setLayout(new BorderLayout());
//创建文本框
textfield = new JTextField(30);
textfield.setEditable(false);
textfield.setHorizontalAlignment(textfield.LEFT);
textfield.setPreferredSize(new Dimension(200,30));//setprefersize
container.add(textfield,BorderLayout.NORTH);
//放入按钮
MyButtons = new JPanel();
MyButtons.setLayout(new GridLayout(4,4));
buttons = new JButton[name.length];
for(int i = 0;i < name.length;i++)
{
buttons[i] = new JButton(name[i]);
buttons[i].addActionListener(new MyActionListener());
MyButtons.add(buttons[i]);
}
container.add(MyButtons,BorderLayout.CENTER);
//设置关闭
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
改进后:
public MyCalculateFrame()
{
//设置Frame的属性
setTitle("calculator");
setSize(300,400);
this.setLocation(700, 350);
//创建容器
Container container = this.getContentPane();
container.setLayout(new BorderLayout());
//创建文本框
textfield = new JTextField(30);
textfield.setEditable(false);
textfield.setHorizontalAlignment(textfield.LEFT);
textfield.setPreferredSize(new Dimension(200,30));//setprefersize
container.add(textfield,BorderLayout.NORTH);
//放入按钮
MyButtons = new JPanel();
MyButtons.setLayout(new GridLayout(4,4));
buttons = new JButton[name.length];
for(int i = 0;i < name.length;i++)
{
buttons[i] = new JButton(name[i]);
buttons[i].addActionListener(new MyActionListener());
MyButtons.add(buttons[i]);
}
container.add(MyButtons,BorderLayout.CENTER);
setVisible(true);//要把setVisible放到组件的后面。
//设置关闭
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}