如何将一个动作侦听器分配给几个按钮?

时间:2014-05-20 13:25:45

标签: java swing jbutton actionlistener

button1.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent ae) {
                exite.setEnabled(true);
            }

        });

button2.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent ae) {
                exite.setEnabled(true);
            }

        });


button3.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent ae) {
                exite.setEnabled(true);
            }

        });

我这里有3个按钮,但它们正在做同样的事情。它需要一些代码空间。如何将它们全部分组并分配给一个ActionListener?

像这样的东西。我不知道应该怎么做。

button1.button2.button3.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent ae) {
                exite.setEnabled(true);
            }

        });

5 个答案:

答案 0 :(得分:6)

首先将ActionListener分配给另一个变量:

ActionListener listener = new ActionListener() {
    ...
};
button1.addActionListener(listener);
button2.addActionListener(listener);
button3.addActionListener(listener);

毕竟这只是一个参考 - 这里唯一的“特殊”事情是使用匿名内部类来创建ActionListener的实例。

如果您想要对所有按钮执行多项操作,您可能希望将它们放入集合中,而不是为它们设置三个单独的变量。

答案 1 :(得分:2)

Juste创建一个变量: - )

ActionListener listener = new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent ae) {
        exite.setEnabled(true);
    }
};
button1.addActionListener(listener);
button2.addActionListener(listener);
button3.addActionListener(listener);

答案 2 :(得分:2)

ActionListener listener = new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent ae) {
            exite.setEnabled(true);
        }

    };

button1.addActionListener(listener);
button2.addActionListener(listener);
button3.addActionListener(listener);

答案 3 :(得分:0)

在班级中实施ActionListener

public class YourClass implements ActionListener

这应该使您必须在一个可以处理所有操作的地方实施actionPerformed方法。 然后,您的addActionListener行应成为:

button1.addActionListener(this);
button2.addActionListener(this);

然后使用:

public void actionPerformed(ActionEvent event) {
    if(event.getSource() == button1 || event.getSource() == button2 || event.getSource() == button3) {
        exite.setEnabled(true);
    }
}

答案 4 :(得分:0)

您可以创建一个名为event的类,该类实现JButtons的ActionListener。然后使用参数getCommand()方法获取JButton的文本,并根据JButton的文本为所有按钮创建if语句,代码为:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*
public class MultipleJButtons extends JFrame {
    JButton button1, button2, button3;
    public static void main(String args[]) {
        MultipleJButtons gui = new MultipleJButtons();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.pack();
        gui.setTitle("Multiple Buttons");
        gui.setVisible(true);
    }
    public MultipleJButtons() {
        event e = new event();
        setLayout(new FlowLayout());
        button1 = new JButton("Button 1");
        add(button1);
        button1.addActionListener(e);

        button2 = new JButton("Button 2");
        add(button2);
        button2.addActionListener(e);

        button3 = new JButton("Button 3");
        add(button3);
        button3.addActionListener(e);
    }
    public class event implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String command = e.getActionCommand();
            if (command.equals("Button 1")) {
                System.out.println("You pressed button 1");
            } else if (command.equals("Button 2")) {
                System.out.println("You pressed button 2");
            } else if (command.equals("Button 3")) {
                System.out.println("You pressed button 3");
            }
    }