下面是一个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);
}
}
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);
}
}
public TestMybutton(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
//这里!dispose();直接这样写是什么意思?
//dispose是Window类的子类,这里是谁调用dispose方法的?
}
});
}
dispose是Window类的方法,可是为什么用Window.dispose()不可以呢?
因为dispose不是静态方法,不能用类名调用,那么是谁在调用dispose方法?
请大家帮忙看看,谢谢了
也是不对的啊,编译器通不过
Frame继承了Window
自然继承了其中的非私有方法而dispose()不是一个静态方法
所以,调用这个方法的时候
就是当前对象在调用dispose()
就是当前的这个TestMybutton对象在调用dispose至于为什么不能用this
是因为你的这个dispose调用的位置是在
new WindowAdapter(){
...
}
这个匿名内部类中
这个时候this是指的这个WindowAdapter你想用this可以这样用
TestMybutton.this.dispose()