問題は、2 つのメソッド シグネチャが同一であることです。Java がどちらのメソッドを呼び出すかを判断しようとするとき、2 つのメソッドの違いを判別できません。
あなたが望むことをするための2つの方法を考えることができます:
おそらく、 のようなボタンにリスナーを登録しています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 がロードする別のものです)。