麻烦看下,是不是我理解的过程出错了:
1.Main语句下的代码运行完毕,button的actionlistener注册成功。
2.Main语句结束,等待是否有组件的事件触发
3.button的action事件触发,疑惑的地方是:如果注册的是new TestFrame3()而不是this,为什么这个frame就不是第一个TestFrame3的,能否告诉我内存的存储情况是怎么样的?
谢谢!
import java.awt.*;
import java.awt.event.*;
class TestFrame3 extends WindowAdapter implements ActionListener
{
Frame f=new Frame();
public static void main(String[] args)
{
TestFrame3 tf=new TestFrame3();
tf.Init();
}

private void Init()
{
f.setVisible(true);
f.setSize(300,399);
f.add(bt);
Button bt=new Button("Blizzard O");
//bt.addActionListener(this);
bt.addActionListener(new TestFrame3());
f.addWindowListener(new TestFrame3());
//f.addWindowListener(this);
}

public void actionPerformed(ActionEvent e)
{
f.dispose();
}

public void windowClosing(WindowEvent e)
{
f.dispose();
}
}

解决方案 »

  1.   

    LZ没明白监听器的回调
    TestFrame实现ActionListener接口(其实继承了WindowAdapter也不需要再实现了,因为WindowAdapter已经impelents ActionListener了)
    那么bt.addActionListener的参数需要一个实现了ActionListener接口的实例以作回调用
    bt.addActionListener(this); //这样是当发生bt的按钮事件时,回调this也就是当前对象的接口方法
    bt.addActionListener(new TestFrame3()); //而这样是当发生bt按钮事件时,回调一个new TestFrame3()对象的接口方法,这个new TestFrame3()和this不是同一个对象,所以new TestFrame3()的方法不影响this对象,也就是说bt.addActionListener(new TestFrame3()); 当发生bt按钮事件时,会关闭new出来的TestFrame3()窗口,而不会关闭当前(this)窗口,所以当前窗口没有任何影响。
    LZ首先要弄清楚this的意义,this的意思就是当前对象,也就是调用谁,谁就是this
    举个例子
    class A {
        String name;
        public A(String name) {
            this.name = name;
        }
        public void test() {
            System.out.println(this.name);
        }    public static void main(String[] args) {
            A a = new A("张三"); //此时A构造方法的this就是a所引用的对象
             A b = new A("李四"); //此时A构造方法的this就是b所引用的对象         a.test(); //此时test方法中的this就是a所引用的对象,所以打印张三,这里是调用a,所以this是a
             b.test(); //此时test方法中的this就是b所引用的对象,所以打印李四,这里是调用b,所以this是b
            //也就是说,this就是指当前被调用的对象,不知道LZ能不能看明白
        }
    }
      

  2.   

    public abstract class java.awt.event.WindowAdapter implements java.awt.event.WindowListener,java.awt.event.WindowStateListener,java.awt.event.WindowFocusListener {
    被 阿宝 吓了一跳
      

  3.   

    还是用LS的例子
    class A {
        String name;
        public A(String name) {
            this.name = name;
        }
        public void test() {
            A a = new A("李四");
            System.out.println(this.name);
            System.out.println(a.name);
            System.out.println(this == a); 
           //LZ觉得这里的this和a是同一个对象吗?LZ在好好理解一下
            //同样的,你的代码里的this和new TestFrame3()是同一个对象吗?想清楚这点你就明白了
        }    public static void main(String[] args) {
            new A("张三").test();
        }     
    }
      

  4.   


    多谢宝哥的详细回答,我只在自学张孝祥的java就业培训这本书,大家都说这本书很好,但我并不觉得,
    就比如你说的回调,书里根本就没说过这回事。