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
countButton.addActionListener(this);
并且ActionPerformed方法中的将运行以显示结果
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中实例化类。这里有一些更好的观点:
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实例化类。这里有一些更好的观点:
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)
另一方面,,