为什么addActionListener方法需要这些阶段?

时间:2016-02-20 11:38:23

标签: java arguments actionlistener system.exit

b.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ea){
            System.exit(0);
        }
    });

我正在学习Java并看到上面的代码。 我无法理解为什么addActionlisetner方法需要Actionlistener参数。 使用System.exit(0)是不是更简单?

4 个答案:

答案 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中,您不能将方法作为参数传递,但您可以传递类。