下面是一个GUI的小程序,在TestMybutton类的构造方法中dispose();不明白dispose()的工作原理,请各位大侠帮忙解释一下,我是java初学者
import java.awt.AWTEvent;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;@SuppressWarnings("serial")
class MyButton extends Button{
private MyButton friend = null;
public MyButton(String title){
super(title);
this.enableEvents(AWTEvent.MOUSE_MOTION_EVENT_MASK);
}
protected void processMouseMotionEvent(MouseEvent e){
this.setVisible(false);
friend.setVisible(true);
}
public void setFriend(MyButton friend){
this.friend = friend;
}
}
public class TestMybutton extends Frame{
public TestMybutton(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
//这里!dispose();直接这样写是什么意思?
//dispose是Window类的子类,这里是谁调用dispose方法的?
//System.exit(0);
}
});
}
public static void main(String[] args) {
System.out.println("Starting TestMybutton!");
TestMybutton mainFrame = new TestMybutton();
mainFrame.setSize(400,400);
mainFrame.setTitle("hello");
MyButton btn1 = new MyButton("快来抓我啊!");
MyButton btn2 = new MyButton("快来抓我啊!");
btn1.setFriend(btn2);
btn2.setFriend(btn1);
mainFrame.add(btn1,"North");
mainFrame.add(btn2,"South");
mainFrame.setVisible(true);
btn1.setVisible(false);
}
}

解决方案 »

  1.   

    想知道工作原理~~~要不去查API,要不去看源码
      

  2.   

    我查了
    public TestMybutton(){
    addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
    dispose();
    //这里!dispose();直接这样写是什么意思?
    //dispose是Window类的子类,这里是谁调用dispose方法的?
    }
    });
    }
    dispose是Window类的方法,可是为什么用Window.dispose()不可以呢?
    因为dispose不是静态方法,不能用类名调用,那么是谁在调用dispose方法?
    请大家帮忙看看,谢谢了
      

  3.   

    这里就是当前对象调用了dispose方法啊!!!当前对象~~~~就是程序运行时候能够执行这段代码时的那个对象
      

  4.   

    this.dispose();
    也是不对的啊,编译器通不过
      

  5.   

    TestMybutton继承了Frame
    Frame继承了Window
    自然继承了其中的非私有方法而dispose()不是一个静态方法
    所以,调用这个方法的时候
    就是当前对象在调用dispose()
    就是当前的这个TestMybutton对象在调用dispose至于为什么不能用this
    是因为你的这个dispose调用的位置是在
    new WindowAdapter(){
    ...
    }
    这个匿名内部类中
    这个时候this是指的这个WindowAdapter你想用this可以这样用
    TestMybutton.this.dispose()