程序如下:
import java.awt.*;
import java.awt.event.*;public class ActionTest extends Frame{
public ActionTest(){
Button test=new Button("Test");
add(test);
test.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Click");
Button b=(Button)e.getSource();
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("Click again");
}
});
}
});
setSize(100,100);
setVisible(true);
setTitle("My Frame");
}public static void main(String[] argus){
ActionTest frame=new ActionTest();}
}
/*结果是点击按钮第一次,显示:
  Click
  点击按钮第二次,显示:
  Click
  Click again
  点击按钮第三次,显示:
  Click
  Click again
  Click again  
  点击按钮第4次
   ……    */
问题:这个程序的匿名内部类的事件是如何执行的啊,为什么随着点击次数的增加Click again的数量会增加?
谢谢!

解决方案 »

  1.   

    因为每次执行一次单击它都增加一个事件对像(里边的)啊.
    b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    System.out.println("Click again");
    }
    });
    每点一次就增加一个了
      

  2.   

    第一次輸出了Click
    然後就馬上把button的actionListener改成另一個了,這個是一有人按就輸出click again的,所以從本質上講並不是真正的從第二次按開始就自動輸出click again,嘻嘻
      

  3.   

    第一单击时候应该是里边增加的那个侦听没有截取到这次的单击事件,如果类推下去
    第一次单击后有两个侦听-->只有一个侦听的方法执行A
    第二次单击后有三个侦听-->只有二个侦听的方法执行AB
    第三次单击后有四个侦听-->只有三个侦听的方法执行ABB