如何在JavaSwing中为多个按钮添加多个ActionListener

如何在JavaSwing中为多个按钮添加多个ActionListener,java,swing,Java,Swing,我知道如何为它创建一个按钮和一个动作侦听器。但我希望有几个按钮和ActionListener,让它们分别执行彼此无关的操作 例如: protected JButton x; x = new JButton("add"); x.addActionListener(this); public void actionPerformed(ActionEvent evt) { //code.....} 现在我想有其他按钮,可能有不同的功能,如减法,乘法等。 请建议。谢谢每次只需创建ActionLis

我知道如何为它创建一个按钮和一个动作侦听器。但我希望有几个按钮和ActionListener,让它们分别执行彼此无关的操作

例如:

protected JButton x;

x = new JButton("add");
x.addActionListener(this);

public void actionPerformed(ActionEvent evt) { //code.....}
现在我想有其他按钮,可能有不同的功能,如减法,乘法等。
请建议。谢谢

每次只需创建
ActionListener
的新实例。 顺便说一句,由于许多原因,建议使用
操作

这是一个很好的资源,它还解释了为什么应该在ActionListeners上使用Actions,这是一个名为


编辑:@fmucar是对的,您可以在一个ActionListener中完成所有操作。尽管有单独的功能操作,但您可以独立地重用它们。

您可以使用
ActionEvent.getSource()
来确定源并相应地执行操作,或者您可以为每个操作定义不同的
actionListener

使用内部类:

x = new JButton("add"); 
x.addActionListener(
  new ActionListener() {
    public void actionPerformed(ActionEvent e) {
      //your code here
    }
  }
);

您可以创建不同的操作侦听器实例,而不使用您的类:

x.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e)
    { ... }
});
与任何类一样,还有其他几种方法可以创建操作侦听器,但对于简短的操作,此(匿名类)是一种方便的方法。

关于:

    JButton addButton = new JButton( new AbstractAction("add") {
        @Override
        public void actionPerformed( ActionEvent e ) {
            // add Action
        }
    });

    JButton substractButton = new JButton( new AbstractAction("substract") { 
        @Override
        public void actionPerformed( ActionEvent e ) {
            // substract Action
        }
    });
那么

protected JButton x, z, a, b,c;

x = new JButton("add x");
z = new JButton("add z");
a = new JButton("add a");
b = new JButton("add b");
c = new JButton("add c");
x.addActionListener(this);
z.addActionListener(this);
a.addActionListener(this);
b.addActionListener(this);
c.addActionListener(this);
然后


这对我来说总是有效的,但老实说,我不确定这是否是一个不错的练习@oliholz是一个很好的使用动作的例子。非常感谢。我在过去的几天里一直在寻找它,但找不到它。这段代码在
JButton(new AbstractAction(){})
处给了我一个错误,方法未定义。@FrasherGray请提供完整的错误行和您的java版本。您是否使用导入javax.swing.JButton导入javax.swing.AbstractAction?不要使用ActionListener,而是使用Action:它的一般规则是始终使用可用的最高抽象
public void actionPerformed(ActionEvent evt)
{
     if (evt.getSource()==x)
         {
            //do something
         }
     else if (evt.getSource()==z)
         {
            //do something
         }
     else if (evt.getSource()==a)
         {
            //do something
         }
     else if (evt.getSource()==b)
         {
            //do something
         }
     else if (evt.getSource()==c)
         {
            //do something
         }
}