Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java addActionListener(此)和addActionListener(新ActionListener)之间的区别是什么?_Java_Event Handling_Actionlistener - Fatal编程技术网

Java addActionListener(此)和addActionListener(新ActionListener)之间的区别是什么?

Java addActionListener(此)和addActionListener(新ActionListener)之间的区别是什么?,java,event-handling,actionlistener,Java,Event Handling,Actionlistener,我想将事件处理添加到按钮中——我注意到有两种方法可以做到这一点 实现ActionListener接口,然后将事件侦听器附加到按钮 例如: countButton.addActionListener(this); 并且ActionPerformed方法中的将运行以显示结果 不要实现ActionListener接口,而是执行以下操作: countButton.addActionListener(new ActionListener() { public void actionPerfor

我想将事件处理添加到按钮中——我注意到有两种方法可以做到这一点

  • 实现ActionListener接口,然后将事件侦听器附加到按钮
  • 例如:

    countButton.addActionListener(this);
    
    并且ActionPerformed方法中的将运行以显示结果

  • 不要实现ActionListener接口,而是执行以下操作:

    countButton.addActionListener(new ActionListener() {
    
        public void actionPerformed(ActionEvent e)
        {
            //Execute when button is pressed
            System.out.println("You clicked the button");
        }
    });  
    
  • 第二种方法到底是如何工作的


    谢谢

    只创建一个实现actionPerformed方法的匿名类。这样,您就不必为要处理事件的每个位置定义新类。

    它只创建一个实现actionPerformed方法的匿名类。这样,您就不必为要处理事件的每个位置定义新类。

    它的工作方式与第一种技术相同,即该方法需要一个实现ActionListener接口的对象。然而,这两种技术都有其优缺点。第一种技术允许使用单个对象,但以杂乱的if/else代码为代价,因为相同的方法将处理多个按钮的事件。第二种技术允许更清晰地分离每个按钮的逻辑,但代价是(为每个按钮)创建多个匿名对象。

    其工作方式与第一种技术相同,即该方法需要一个实现ActionListener接口的对象。然而,这两种技术都有其优缺点。第一种技术允许使用单个对象,但以杂乱的if/else代码为代价,因为相同的方法将处理多个按钮的事件。第二种技术允许更清晰地分离每个按钮的逻辑,但代价是(为每个按钮)创建多个匿名对象。

    要添加ActionListener,您需要一个实现ActionListener接口的类(它定义了一个方法,
    actionPerformed
    addActionListener(this)
    意味着
    this
    实现该接口,执行的任何操作都将调用
    this.actionPerformed


    在第二种情况下,您要做的是创建一个实现ActionListener接口的新的匿名类。单击
    countButton
    时,调用的
    actionPerformed
    方法是匿名类中的方法。

    无论哪种方式,要添加ActionListener,都需要一个实现ActionListener接口的类(该接口定义了一个方法,
    actionPerformed
    addActionListener(this)
    意味着
    this
    实现该接口,执行的任何操作都将调用
    this.actionPerformed


    在第二种情况下,您要做的是创建一个实现ActionListener接口的新的匿名类。单击
    countButton
    时,调用的
    actionPerformed
    方法是匿名类中的方法。

    您的问题并不完全在侦听器上,而是关于接口如何工作以及如何在Java中实例化类。这里有一些更好的观点:

  • 基本上,JButton类为您提供了一种方法来声明一个类,该类是在按钮上触发事件时(如单击事件时)将调用的一个特定方法。如果您查看JButton和ActionListener的Javadocs,您现在将了解它们的工作原理:
  • )

    在这里,您可以用最老式的方式创建一个类,当有人单击您的按钮时会触发该类:

    public class MyButtonActionListener implements ActionListener {
    
    actionPerformed(ActionEvent e) {    
        System.out.println("Aww, you clicked!");    
        }
    }
    
    JButton button = new JButton("My button");
    
    现在,完成后,您可以对其进行疯狂处理,并将其作为侦听器添加到您的按钮中:

    public class MyButtonActionListener implements ActionListener {
    
    actionPerformed(ActionEvent e) {    
        System.out.println("Aww, you clicked!");    
        }
    }
    
    JButton button = new JButton("My button");
    
    MyButtonActionListener myActionListener=新建MyButtonActionListener(); addActionListener(myActionListener)

    另一方面,在Java中,您可以实例化一个类Anonimous,这意味着您不需要为它的实例设置处理程序(如上面代码中的myActionListener),只需在需要的地方动态实例化它,以后就不会有处理程序使用它了。这就是代码中发生的情况:ActionListener实现作为addActionListener方法的参数在运行中被删除,该运行中声明还包括这样一条语句,即匿名实例不仅是任何类,而且是实现ActionListener的类,这样的匿名声明需要提供actionPerformed方法的实现

    第三个选项是拥有一个实现ActionListener(和actionPerformed方法)的类,在该类中,如果您创建一个JButton并希望将其作为Ecomposing类的一个实例传递给listener,您将使用“this”引用该类,如中所示:

    public class MyButtonActionListener implements ActionListener {
    
    private JButton button = new JButton();
    
    
    public void init() {
        button.addActionListener(this);
    }
    
    public actionPerformed(ActionEvent e) {
        System.out.println("u clicked!");
        }
    }
    

    对于这个讨论,有很多更好的观点(比如如何在一个匿名类上引用其他类中的“this”,以及如何引用包含的类实例的“this”)。我建议您阅读一本关于Sun认证Java程序员认证的书,书中有一章专门介绍这一点

    您的问题并不完全在侦听器上,而是关于接口如何工作以及如何用Java实例化类。这里有一些更好的观点:

  • 基本上,JButton类为您提供了一种方法来声明一个类,该类是在按钮上触发事件时(如单击事件时)将调用的一个特定方法。如果您查看JButton和ActionListener的Javadocs,您现在将了解它们的工作原理:
  • )

    在这里,您可以用最老式的方式创建一个类,当有人单击您的按钮时会触发该类:

    public class MyButtonActionListener implements ActionListener {
    
    actionPerformed(ActionEvent e) {    
        System.out.println("Aww, you clicked!");    
        }
    }
    
    JButton button = new JButton("My button");
    
    现在,完成后,您可以对其进行疯狂处理,并将其作为侦听器添加到您的按钮中:

    public class MyButtonActionListener implements ActionListener {
    
    actionPerformed(ActionEvent e) {    
        System.out.println("Aww, you clicked!");    
        }
    }
    
    JButton button = new JButton("My button");
    
    MyButtonActionListener myActionListener=新建MyButtonActionListener(); addActionListener(myActionListener)

    另一方面,,