黑马程序员技术交流社区

标题: 自学java的时候,遇到了一个诡异的bug````快进来看看! [打印本页]

作者: liang梁    时间: 2015-7-1 20:59
标题: 自学java的时候,遇到了一个诡异的bug````快进来看看!
先上代码:
import java.awt.*;
import java.awt.event.*;
public class exe1 {
public static void main(String args[]){

Frame frame1 = new TestFrame();
Button b = new Button("press this!");
b.addActionListener(new MyMonitor());

frame1.add(b);


}

}
//以下是自己写的frame
class TestFrame extends Frame{
TestFrame(){
setSize(300,300);
setVisible(true);
setLocation(400,400);
setTitle("Cao Ni Ma!");
setVisible(true);

}
}
//下面是监听器

class MyMonitor implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println("ahahahaha!");

}
}

我为了练习实现监听器就随便写了一个小程序.

用eclipse编译运行之后发现,我明明在程序中写了frame1.add(b),按钮却不显示在frame中。

后来发现我在TestFrame的构造器中多写了一句setVisible(true)。如果把这一句删掉,就能正常显示了。

求问这是为什么?

为什么构造器中有两个setVisible(true)就不显示button,只有一个setVisible(true)的时候就能正常显示了呢?
作者: luorenyu    时间: 2015-7-1 21:07
级别还不够,根本看不懂呀
作者: liang梁    时间: 2015-7-1 21:33
luorenyu 发表于 2015-7-1 21:07
级别还不够,根本看不懂呀

何为你那么多黑马币
作者: samove    时间: 2015-7-1 21:54
我看不太懂,还没到那水平,不过学习的过程中,遇到很多有意思的东东,还是很好玩的,特别是解决的时候。
作者: 453203489    时间: 2015-7-2 04:16
awt图形界面相关的东西一直都没碰过。。。
作者: lvzhfeng    时间: 2015-7-2 04:53
支持一下。。。。。
作者: yedong313    时间: 2015-7-2 06:34
你这个问题提的有意义吗?一般setVisible(true)是放在主函数中的把,你在一个自定义继承frame的类里面就调用setVisible()方法,以后使用这个类定义新对象的时候都不受控制的显示一个窗口出来,使用起来得多麻烦!
作者: tinibuzhi    时间: 2015-7-2 22:06
一起学习一下                  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2