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