问题在于您的两个方法签名是相同的。当 Java 试图找出调用哪个方法时,它无法区分两者之间的区别。
我可以想到两种方法来做你想做的事:
据推测,您正在注册按钮上的侦听器,例如cancelButton.addActionListener(...)
. 因此,您可以为每个按钮提供自己的匿名内部类:
loginButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent logInEvent) {
System.out.println("Button Login");
}
}
cancelButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent cancelEvent) {
System.out.println("Cancel Login");
}
}
或者您可以定义一个检查调用来源的 actionPerformed 方法:
public class TheHandler implements ActionListener {
JButton loginButton;
JButton cancelButton;
public TheHandler()
{
...
// Now, technically, this is bad form because you're leaking 'this'.
// But as long as this will only be called after this constructor finishes
// initializing, it's safe.
loginButton.addActionListener(this);
cancelButton.addActionListener(this);
...
}
...
@Override
public void actionPerformed(ActionEvent evt) {
if(evt.getSource() == loginButton)
System.out.println("Button Login");
else if(evt.getSource() == cancelButton)
System.out.println("Cancel Login");
}
}
使用匿名内部类有时会更清晰,因为您会在 addListener 调用旁边看到代码,但它也会添加很多样板文件,如果您正在处理可能需要一段时间才能加载的非常大的项目,减少类的数量有时可以使其加载速度更快(每个匿名内部类都是 JVM 加载的另一件事)。