密码字段颜色

时间:2013-10-23 14:07:52

标签: swing

我想用关键的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);
    }

}

2 个答案:

答案 0 :(得分: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事件之前将多个字符输入到该字段中。

最佳解决方案是使用文档侦听器。有关详细信息,请阅读How to Write a Document Listener上的Swing教程中的部分。

答案 1 :(得分: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()