2013-10-23 70 views
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); 
    } 

} 
+1

向我們展示您嘗試使用的代碼 –

+1

您嘗試了什麼以及哪些/如何不按預期工作?請顯示證明你的問題的SSCCE – kleopatra

回答

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()

+0

我改正了它,但仍然不起作用 –

+0

然後嘗試一下sugg – Makky

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事件之前,多個字符將被輸入到該字段中。

最好的解決方案是使用Document Listener。請閱讀Swing教程How to Write a Document Listener中的部分以獲取更多信息。