这种方法有什么用?

Suh*_*pta 2 java

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

虽然我最近一直在使用这种方法,但我不明白这是怎么回事

这是一个:{

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

  public void actionPerformed(ActionEvent ae) {
    submitActionPerformed(ae);
  }
}); //action listener added
Run Code Online (Sandbox Code Playgroud)

调用的方法:

public void submitActionPerformed(ActionEvent ae) {

    // body

}
Run Code Online (Sandbox Code Playgroud)

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

另外,请解释标记为代码的内容line 1.

请清楚解释2个片段.

Zac*_*h L 9

您在技术上确实实现了ActionListener.你打电话的时候addActionListener:

submit.addActionListener(
 new ActionListener(){
  public void actionPerformed(ActionEvent ae) {
   submitActionPerformed(ae); 
   } 
  });
Run Code Online (Sandbox Code Playgroud)

您创建了一个匿名类的实例,或者一个ActionListener没有名称的类.

换句话说,上面的代码段基本上就像我们用本地内部类做的那样:

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

submit.addActionListener(new MyActionListener());
Run Code Online (Sandbox Code Playgroud)

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

  • 并且您希望使用匿名类的原因是,侦听器代码更接近使用它的控件.当所需的代码相对较小时,您可能只想使用匿名类, (3认同)