1. 程式人生 > >Java影象介面學習筆記1

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);
                    }
                });
    }