Java听众 - 更简单的方法?

时间:2014-04-11 18:56:00

标签: java swing

我的代码遇到了麻烦。我想知道是否有更简单的方法来使用听众而不是经常这样做:

example.addActionListener(new java.awt.event.ActionListener() {
        @Override
        public void actionPerformed(java.awt.event.ActionEvent evt) {

            if (example.isSelected()) { 
                System.out.println("Example is selected");

所以我为每个单选按钮执行此操作,这意味着我必须不断重复相同的代码。现在它可能很容易,但我可以说我使用了100多个单选按钮。然后我必须一遍又一遍地重复它。有更简单的方法吗?

这是我正在使用的代码,您可以在其中找到其中一些代码:

4 个答案:

答案 0 :(得分:1)

如果你正在使用Java8,你可以考虑使用Lambdas:

example.addActionListener(e -> {
    System.out.println("You clicked the button");
});

有关详细信息,请参阅OracleDocs - Lambda Expressions 有关与您的问题相符的小教程,请参阅Lambda Expressions for ActionListeners

答案 1 :(得分:1)

您可以在使用之前定义ActionListener,因此您可以改为:

ActionListener myListener = new java.awt.event.ActionListener() {
    @Override
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        if (evt.getSource() == radioButton1) { 
            ...
        } else if (evt.getSource() == radioButton2) { 
            ...
        }
}

然后在任何地方使用它:

radioButton1.addActionListener(myListener);
radioButton2.addActionListener(myListener);

答案 2 :(得分:0)

是的,有更好的方法。停止使用匿名类,并创建一个实际的ActionListener类。

public class RadioButtonActionListener implements ActionListener {
    private JRadioButton radioButton;
    private String message;

    public void actionPerformed(ActionEvent evt) {
        if (this.radioButton.isSelected()) {
            System.out.println(message);
        }
    }

    public RadioButtonActionListener(JRadioButton button, String msg) {
        this.radioButton = button;
        this.message = msg;
    }
}

然后像这样设置

faktura.addActionListener(new RadioButtonActionListener(faktura, "Fakturering vald"));

答案 3 :(得分:0)

您可以对所有按钮使用相同的ActionListener。我假设您知道如何创建和使用单个ActionListener。为了区分按钮,我考虑给每个按钮提供一个唯一的ActionCommand字符串,以简化分支逻辑。传递的ActionEvent将通过getActionCommand()公开ActionCommand字符串。

public void actionPerformed(java.awt.event.ActionEvent evt) {
    String cmd = evt.getActionCommand();

    // now, inspect and branch on cmd
}