事件监听器放在哪里?

Where to put event listeners.?

其中哪个更好,为什么? 以我未受过教育的观点,最好将它们放在单独的文件中,因为如果你有,比方说,10 个按钮、5 个组合框和一个或两个包含所有这些 类 的列表,在一个文件中会变得混乱。我这样想对吗?为什么你会选择一个而不是另一个?

SimpleGUI.java:

public class simpleGUI extends JFrame {

public JButton button;
public JLabel label;
public simpleGUI() {
Container contentPane = getContentPane();
JPanel panel = new JPanel();
label = new JLabel("123abc");
button = new JButton("click me");

    simpleEventListener c = new simpleEventListener();
    c.setParams(label);
    button.addActionListener(c);

    panel.add(button);
    panel.add(label);

    contentPane.add(panel);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300,300);
    setTitle("simpleGUI");
    setVisible(true);
}
public static void main(String[]args) {
    JFrame frame = new simpleGUI();
}
}

simpleEventListener.java:

 public class simpleEventListener implements ActionListener {
        private JLabel label;
        public void actionPerformed(ActionEvent e) {
            label.setText("Hello World!");
        }
        public void setParams(JLabel label) {
            this.label = label;
        }
    }

或:

public class simpleGUI extends JFrame {
    public JButton button;
    public JLabel label;
    public simpleGUI() {
        Container contentPane = getContentPane();
        JPanel panel = new JPanel();
        label = new JLabel("123abc");
        button = new JButton("click me");

        simpleEventListener c = new simpleEventListener();
        button.addActionListener(c);

        panel.add(button);
        panel.add(label);

        contentPane.add(panel);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300,300);
        setTitle("simpleGUI");
        setVisible(true);
    }
    public class simpleEventListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            label.setText("Hello World!");
        }
    }
    public static void main(String[]args) {
        JFrame frame = new simpleGUI();
    }
}

it is better to have them in separate files, because if you have, say, 10 buttons, 5 combo boxes and a list or two having all these classes in the one file will get messy. Am I right in thinking that?

没有。没有什么真正混乱的。 包含 class 的文件将被结构化, 其中有一个主要 class 和其他几个 classes, 除了 class.

以外的任何地方都无法访问

Why would you choose one over the other?

封装。 如果侦听器不会用于您项目中的任何其他 class, 那么就没有必要暴露它们了。事实上,暴露它们(使它们可见)可能会造成混乱。 使用您的主 class 的其他代码也将看到侦听器 classes, 即使他们不能将它们用于任何事情。

即使您将 classes 保持在内部,例如您所做的 simpleEventListener, 你应该把它设为 private 而不是 public。 项目中的其他 classes 不需要知道它。 封装与信息隐藏密切相关。 它使您的界面保持清洁。