0

我想用键 Listener 更改我的 JPasswordField 的颜色。我正在制作注册表单,用户应在密码字段中至少填写 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在此字段上使用 an。除非输入了至少 8 位数字,否则输入验证器将阻止用户离开该字段。

注意:即使使用 keyTyped() 事件,您仍然会遇到问题,因为如果用户使用“BackSpace”键,则不会生成事件。所以也许你应该使用 keyRelased() 事件。即使这样也可能导致问题,因为如果用户按住一个键,则会在触发 keyReleased 事件之前将多个字符输入到该字段中。

最好的解决方案是使用 Document Listener。阅读 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 回答