Проблема в том, что ваши две сигнатуры метода идентичны.Когда 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).