0

さて、各テキストフィールドはアクションリスナーです。私は多くのテストを行い、アクションリスナーを追加することは問題ではないことを発見しました。問題は以下のコードのどこかにあります。これは、上位4つのテキストフィールドについて、helloウィンドウが表示されますが、okは表示されないためです。しかし、一番下のウィンドウでは、okウィンドウとhelloウィンドウがポップアップします。私は何を間違えましたか?

public class handler implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        if (event.getSource() == text)
        {
            JOptionPane.showMessageDialog(null, "ok");
        }
        else if (event.getSource() == text1)
        {
            JOptionPane.showMessageDialog(null, "ok");
        }
        else if (event.getSource() == text2)
        {
            JOptionPane.showMessageDialog(null, "ok");
        }
        else if (event.getSource() == text3)
        {
            JOptionPane.showMessageDialog(null, "ok");
        }
        else if (event.getSource() == text4)
        {
            JOptionPane.showMessageDialog(null, "ok");
        }
        JOptionPane.showMessageDialog(null, "hello");
    }
}
4

1 に答える 1

1

あなたが直面している問題は、あなたが浅い比較をしているということです:

event.getSource() == textX

したがって、if-elseの条件を満たしたり、text1...text4の「ok」ダイアログが表示されたりすることはありません。

複数のテキストフィールドに単一のActionListenerを使用し、イベントソース(イベントが発生したテキストフィールド)に基づいて動作を区別しようとしているようです。

そうするのではなく、テキストフィールドごとにActionListener実装を作成することを検討することをお勧めします。

私は通常、ActionListenerを匿名クラスとして作成するため、イベントが発生したときに特定のフィールドで何をしたいかをカスタマイズできますが、アプリケーションでクラスを増やす必要はありません。

于 2012-10-03T02:54:15.403 に答える