这种方法有什么用?

时间:2011-03-17 05:17:38

标签: java

我经常遇到这种注册动作监听器的方式。

虽然我最近一直在使用这种方法,但我不明白这是怎样的以及为什么这个

这是一个:{

submit=new JButton("submit");
submit.addActionListener(new ActionListener(){       // line 1

  public void actionPerformed(ActionEvent ae) {
    submitActionPerformed(ae);
  }
}); //action listener added

} 调用的方法:

public void submitActionPerformed(ActionEvent ae) {

    // body

}

在这个方法中,我不需要实现ActionListener。为什么呢?

另外,请解释标记为line 1的代码。

请清楚解释2个片段。

1 个答案:

答案 0 :(得分:9)

您在技术上确实实现了ActionListener。当您致电addActionListener时:

submit.addActionListener(
 new ActionListener(){
  public void actionPerformed(ActionEvent ae) {
   submitActionPerformed(ae); 
   } 
  });

您创建了anonymous class的实例,或者实现ActionListener而没有名称的类。

换句话说,上面的代码段基本上就像我们使用local inner class执行此操作一样:

class MyActionListener implements ActionListener
{
 public void actionPerformed(ActionEvent ae)
 {
  submitActionPerformed(ae);
 }
}

submit.addActionListener(new MyActionListener());

对于您的示例,匿名类只调用您的一个成员方法submitActionPerformed。这样,您的方法可以具有比actionPerformed更具描述性的名称,并且除了ActionListener之外,它还使其可以在您的类中的其他位置使用。