1

私が作ったゲームのログインスクリプトを書いています。私は現在、提供された情報が有効であることを確認するために確認中です。2 つのテキスト フィールドの値が同じかどうかを確認しようとすると、問題が発生しました。彼らがそうするとき、彼らは私がやりたいこととは反対のことをします。

private void regAccConfEmailFieldFocusFocusLost(FocusEvent event) {
    if(regAccConfEmailField.getText() == regAccEmail.getText() && regAccConfEmail != null)
    {
        regAccConfEmailField.setBorder(new LineBorder(Color.green, 1, false));
        confEmail = true;
    }
    else
    {
        regAccConfEmailField.setBorder(new LineBorder(Color.red, 1, false));
        confEmail = false;
    }
}

private void regAccConfSecQFieldFocusFocusLost(FocusEvent event) {
    if(regAccConfSecQField.getText() == null)
    {
        regAccConfSecQField.setBorder(new LineBorder(Color.red, 1, false));
        secQuestion = false;
    }
    else
    {
        regAccConfSecQField.setBorder(new LineBorder(Color.green, 1, false));
        secQuestion = true;
    }
}  

これは私が持っているコードであり、これらの各メソッドが与えられたものと反対のことをする理由を知る必要があります.

regAccConfEmailField と regAccEmailField の両方が hello@gmail.com に等しいとします。else ではなく if ステートメントに移動します。必要に応じて、さらにコードを提供できます。

4

1 に答える 1

4

このステートメントには 2 つの問題があります。

if (regAccConfEmailField.getText() == regAccEmail.getText() && regAccConfEmail != null)
  • null次の場合に式を短絡するように、最初にチェックを行う必要がありますregAccConfEmailnull
  • また、演算子の代わりにコンテンツString.equalsを比較するために使用します。演算子はオブジェクト参照を比較するために使用され、現在、2 つのフィールドの値が異なるオブジェクトになるため、必要なものとは反対の結果が得られます。String====String

あなたはと置き換えることができます

if (regAccConfEmail != null && regAccConfEmailField.getText().equals(regAccEmail.getText()))
  • また、交換するregAccConfSecQField.getText()ことはできません。nullJTextField

    if (regAccConfSecQField.getText() == null)

  if (regAccConfSecQField.getText().trim().isEmpty())
  • 最後に、検証の実行にFocusListener依存するを使用しているようです。ドキュメントの変更に対する検証をトリガーするためにDocumentListenerFocusEventsを使用する方法を見てみましょう。
于 2012-12-29T00:05:35.330 に答える