A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘源 中级黑马   /  2012-7-27 14:26  /  1450 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘源 于 2012-7-28 08:44 编辑

代码入下:
import java.awt.*;
import java.awt.event.*;
class AwtDemo
{
        public static void main(String[] args)
        {
                Frame f = new Frame("我的窗体");//默认边距布局
                f.setLayout(new FlowLayout());
                f.setSize(500,400);
                f.setLocation(300,300);
                //f.setVisible(true);
                Button b = new Button("点击我");
                f.add(b);
                f.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent e)
                        {
                        System.exit(0);
                        }
                        
                        public void windowActivated(WindowEvent e)
                        {
                        System.out.println("我在最前端了");
                        }
                        public void windowOpened(WindowEvent e)  
                        {
                        System.out.println("我被打开了");
                        }
               
                });
                //f.setVisible(true);
        }
}

当第一个f.setVisible(true); 显示  第二个 隐藏,打印结果为:我在最前端了
当第二个 f.setVisible(true);  显示 第一个 隐藏,打印结果为: 我在最前端了    我被打开了
为什么f.setVisible(true); 在addWindowListener( )语句前后会导致输出结果不一样啊。是不是setVisible(true) 这语句必须要写到最后才可以啊,感觉它写在前面也没有什么区别啊。
求高手解释下?

3 个回复

倒序浏览
setVisible(true)这个代码以上,一般是用来初始化窗口的。而如果在这行代码一下还有定义组件的话,不重新构造窗口,你是看不见改变的。也就是说,后面定义的一些东西都没用了。
回复 使用道具 举报
对于setVisible()方法位置不同导致的结果不同完全是程序运行流程的问题
当setVisible()在后面的时候 激活了windowOpen事件 就显示了"我被打开"
当setVisible()在前面的时候 没有执行到windowOpen事件,所以不会有显示

setVisible()在前在后的问题要看需要

不过我通常是定义并添加完所有组件之后 就让它显示

我没有开发经验也没看过大牛的代码,setVisible()何时使用 现在只能看需求了
回复 使用道具 举报
先用后用区别不大,但是显示的话就涉及到刷新了,后添加的组件只能在刷新之后显示。
就刷新显示这点来说,一般都在最后用,要不然界面看起来一闪一闪的不美观。
另外刷新界面可以使用组件repaint();这个方法,一般是调用窗体的repaint()。
如果界面不是变来变去的话就在最后用setVisible()就行了。
结论:f.setVisible(true);一定要最后调用,不然的话,容易造成有的组件不显示。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马