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

猜你喜欢

转载自blog.csdn.net/Zachary_N/article/details/83957361