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

时间:2011-05-06 12:39:56

标签: java swing

我知道如何为它创建一个按钮和一个动作侦听器。但是我希望它们有几个按钮和actionListeners,它们可以执行彼此无关的单独操作。

示例:

protected JButton x;

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

public void actionPerformed(ActionEvent evt) { //code.....}

现在我想要其他按钮可能有不同的功能,如减法,乘法等。 请建议。感谢

6 个答案:

答案 0 :(得分:11)

怎么样:

    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
        }
    });

答案 1 :(得分:7)

使用内部类:

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

答案 2 :(得分:5)

您可以使用ActionEvent.getSource()来确定来源并采取相应措施,也可以为每个来源定义不同的ActionListeners

答案 3 :(得分:2)

怎么样......

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);

然后

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
         }
}

这对我来说总是有用,但说实话,我不确定这是不是不好的做法

答案 4 :(得分:1)

您每次只需要创建ActionListener的新实例。 BTW由于很多原因,建议使用Action代替。

这是一个很好的资源,它也解释了为什么你应该使用Action over ActionListeners,一个标题为How to Use Actions的Java教程

编辑:@fmucar是对的,你可以在一个ActionListener中完成所有操作。虽然具有单独的功能操作允许您独立重用它们。

答案 5 :(得分:1)

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

x.addActionListener(new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e)
    { ... }
});

创建动作侦听器还有其他几种方法,就像任何类一样,但对于简短的动作,这个(匿名类)是一种方便的方法。