Java影象介面學習筆記1
前些日子剛學完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);
}
});
}