相同的ActionListener用于不同的按钮 - 最佳实践

时间:2015-03-12 19:36:17

标签: java swing actionlistener

代码有效,但我想知道当按钮在不同文件上执行相同任务时,这是否是添加actionListener的最佳方式/最佳推荐方式。我已经阅读了制作类实现ActionLister接口与为每个按钮添加匿名actionListener类之间的争论。这两种方法似乎都不适合这种情况。这是我的代码,其中遗漏了无关的内容:

public class ABC {
    public ABC() {
        // constructor here
    }

    private JMenuBar createMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu menu1 = new JMenu("File");
        menuBar.add(menu1);

        JRadioButtonMenuItem P1 = new JRadioButtonMenuItem();
        JRadioButtonMenuItem P2 = new JRadioButtonMenuItem();

        P1.addActionListener(fileSelectionListener);
        P2.addActionListener(fileSelectionListener);
        P1.setText("P1");
        P2.setText("P2");
        menu1.add(P1);
        menu1.add(P2);

        return menuBar;
    }

    ActionListener fileSelectionListener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JRadioButtonMenuItem source = (JRadioButtonMenuItem) e.getSource();
            String a = source.getText();
            loadFile(a);
        }
    };

    private void loadFile(String a) {
        // implementation of method
    }
    // adding things to the frame
    // main method
}

1 个答案:

答案 0 :(得分:0)

最好的方法?可能不是大多数人的标准。在我眼里?是的,这可能是最好的方式。您创建了一个ActionListener的可重用实例,因为您多次使用它。对我来说,这与使类扩展ActionListener是一回事。

大多数建议将我们带入辩论的深度,所以我可能不会偏离那里太远;)

你的方法肯定比为每个按钮添加一个匿名监听器更快。