我经常遇到这种注册动作监听器的方式。
虽然我最近一直在使用这种方法,但我不明白这是怎样的以及为什么这个
这是一个:{
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个片段。
答案 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之外,它还使其可以在您的类中的其他位置使用。