我的代码遇到了麻烦。我想知道是否有更简单的方法来使用听众而不是经常这样做:
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多个单选按钮。然后我必须一遍又一遍地重复它。有更简单的方法吗?
这是我正在使用的代码,您可以在其中找到其中一些代码:
答案 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
}