0

JPasswordField の色をキー Listener で変更したいと考えています。登録フォームを作成していますが、ユーザーはパスワード フィールドに数字と文字を含む 8 文字以上を入力する必要があります。誰でも私を助けることができますか?

私のコード:

enter code here

 public void keyPressed(KeyEvent e) {
    if(e.getSource()==passwordField){
        if(passwordField.toString().length()>=8)
            passwordField.setBackground(Color.GREEN);
        else
            passwordField.setBackground(Color.RED);
    }

}
4

2 に答える 2

1

keyPressed() イベントが発生したとき、パスワード フィールドのドキュメントはまだ更新されていないため、長さは想定よりも 1 短くなります。

代わりに、次のkeyTyped()方法を試してください。

public void keyTyped(KeyEvent e) 
{
    JPasswordField password = (JPasswordField)e.getSource();

    if(passwordField.getPassword().length >= 8)
        passwordField.setBackground(Color.GREEN);
    else
        passwordField.setBackground(Color.RED);
}

また、リスナーを作成するときは、インスタンス変数にアクセスするのではなく、イベント オブジェクトからイベントのソースを取得する必要があります。

InputVerifierこのフィールドでを使用することも検討してください。入力ベリファイアは、少なくとも 8 桁が入力されていない限り、ユーザーがこのフィールドから離れることを防ぎます。

注: keyTyped() イベントを使用しても、ユーザーが「BackSpace」キーを使用するとイベントが生成されないため、問題が発生する可能性があります。したがって、おそらく keyRelased() イベントを使用する必要があります。ユーザーがキーを押したままにすると、keyReleased イベントが発生する前に複数の文字がフィールドに入力されるため、これでも問題が発生する可能性があります。

最善の解決策は、ドキュメント リスナーを使用することです。詳細については、ドキュメント リスナーの作成方法に関する Swing チュートリアルのセクションを参照してください。

于 2013-10-23T15:13:28.737 に答える
0

あなたはそれを間違っている

これに変更

public void keyPressed(KeyEvent e) {
    if(e.getSource()==passwordField){
        if(passwordField.getPassword().length()>=8)
            passwordField.setBackground(Color.GREEN);
        else
            passwordField.setBackground(Color.RED);
    }

}

あなたが使用する必要がありますgetPassword()

于 2013-10-23T14:40:55.690 に答える