哪种方式实现ActionListener更正确?
是否有主要的性能差异?

为该类实现一个ActionListener:

public class MainFrame implements ActionListener {

    JButton exampleButton1 = new JButton();
    JButton exampleButton2 = new JButton();
    JButton exampleButton3 = new JButton();

    public MainFrame(){
        exampleButton1.addActionListener(this);
        exampleButton2.addActionListener(this);
        exampleButton3.addActionListener(this);
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();

        if(src.equals(exampleButton1)){
            //Do something
        }else if(src.equals(exampleButton2)){
            //Do something
        }else if(src.equals(exampleButton3)){
            //Do something
        }
    }
}


与向每个JButton添加ActionListeners相对:

public class MainFrame {

    JButton exampleButton1 = new JButton();
    JButton exampleButton2 = new JButton();
    JButton exampleButton3 = new JButton();

    public MainFrame(){
        exampleButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //Do something
            }
        });

        exampleButton2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //Do something
            }
        });

        exampleButton3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //Do something
            }
        });
    }
}


或者甚至使用Lambdas ..?

最佳答案

我希望使用单个Action作为按钮的侦听器。 Action是稍微高级的侦听器,可以在可以使用ActionListener的任何地方使用。

它提供了其他功能,例如:


多个组件(例如JButton,JMenuItem)可以使用同一Action
您可以禁用操作,这将禁用所有使用该操作的组件
它允许为您的组件分配助记符和加速器


有关此概念的更多信息和示例,请参见How to Use Actions上的Swing教程。

09-27 21:07