package com.frameactiontest;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class FrameActionTest implements ActionListener {
/**
 * @param args
 */
Frame f = new Frame();
public static void main(String[] args) {
// TODO Auto-generated method stub
FrameActionTest fat = new FrameActionTest();
fat.init(); //调用init()方法.
}
public void init(){
Button bn =new Button("Confirm");  //new Button按钮对对象.
f.add(bn);
f.setSize(800, 600);
f.setVisible(true);
bn.addActionListener(this); //曾加监听器.
}
public void actionPerformed(ActionEvent e) { //重写 ActionListener的方法.
// TODO Auto-generated method stub
f.setVisible(false);
f.dispose();
}
}
我想问的是:
类“FrameActionTest” implements(实现了) 类“ActionListener” ,这里从main函数的执行代码顺序看,
重写 类“ActionListener”的“actionPerformed(ActionEvent e)”方法,
然后我疑问的是java怎么知道 先执行main函数的“init()”方法之后才执行重写的“actionPerformed(ActionEvent e)”方法,(因为我认为“actionPerformed(ActionEvent e)”方法是在main 函数中“new FrameActionTest()”的时候就执行了)

解决方案 »

  1.   


    其实也没啥,主要就是这句话的认识是错误的而已:
      “因为我认为“actionPerformed(ActionEvent e)”方法是在main 函数中“new FrameActionTest()”的时候就执行了”
    实际上,actionPerformed() 函数是在有事件发生时,才会被调用的。init() 则是你刚创建好FrameActionTest对象就调用了。而且这类问题,想实验下也很简单,加个断点,或者增加println来记录下运行位置。
      

  2.   

    一楼正解,actionPerformed() 函数是在事件发生时被调用,而init() 是初始化方法,刚创建好FrameActionTest对象时,就会被调用,所以才会是那个执行顺序,可以测试一下,打印店东西出来看看就知道顺序了
      

  3.   

    “实际上,actionPerformed() 函数是在有事件发生时,才会被调用的。”这句话对我太有用了,谢谢了,我初学的,我也试过追踪,但是就是不知道为什么···谢谢大家···