b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ea){
System.exit(0);
}
});
我正在学习Java并看到上面的代码。
我无法理解为什么addActionlisetner
方法需要Actionlistener
参数。
使用System.exit(0)
是不是更简单?
答案 0 :(得分:2)
这就是Java的工作方式。您需要将匿名类的实例传递给addActionListener()
方法(毕竟它是一个监听器)。
这是使用Java 7或更早版本的方法。但是,使用 Java 8 ,您可以使用lambda表达式来缩短代码(因为ActionListener是功能接口):
// You can do this
b.addActionListener((ActionEvent) ae -> System.exit(0));
// or this
b.addActionListener((ActionEvent) ae -> {
System.exit(0);
});
// or even better, this
b.addActionListener(ae -> System.exit(0));
答案 1 :(得分:2)
您可以使用API Java作为参考来查找问题的答案。
public void addActionListener(ActionListener l)
向按钮添加ActionListener。
参数:
l - 要添加的ActionListener
例如,具体类JButton从类javax.swing.AbstractButton继承了方法addActionListener(ActionListener l)
。
当你这样做时:
new ActionListener(){
public void actionPerformed(ActionEvent ea){
System.exit(0);
}
}
您正在创建一个anonymous subclass ActionListener的实例。
ActionListener是用于接收操作事件的界面。
API说:
对处理动作事件感兴趣的类实现此接口,并使用组件的addActionListener方法向组件注册使用该类创建的对象。当动作事件发生时,将调用该对象的actionPerformed方法。
答案 2 :(得分:1)
addActionListener的参数指定事件处理程序类的实例作为组件的侦听器(在本例中为“ b ”) 传递anonymouos类'ActionListener'的实例或您自己的类的实例(b.actionListener(this)),两者都可以。
答案 3 :(得分:0)
基本上,按下按钮时会调用actionPerformed()
类中的ActionListener
方法。
您不能拥有b.addActionListener(System.exit(0));
,因为System.exit(0)
是一种方法。在Java中,您不能将方法作为参数传递,但您可以传递类。