2013-10-23 5 views
0

키 리스너를 사용하여 JPasswordField의 색상을 변경하고 싶습니다. 나는 등록 양식을 만들고 있는데, 사용자는 숫자와 문자가 포함 된 8 자 이상으로 passwordfield를 채워야합니다. 아무도 나를 도울 수 있습니까?비밀번호 필드 색상

내 코드 :

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

keypressed를() 이벤트가 시작되면 당신이이

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

를 사용해야하고있어 비밀번호 필드의 문서가 아직 업데이트되지 않았으므로 길이는 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 자리가 입력되지 않는 한 사용자가이 필드에서 벗어난 탭을 방지합니다.

참고 : 사용자가 "BackSpace"키를 사용하면 이벤트가 생성되지 않으므로 keyTyped() 이벤트를 사용하더라도 문제가 발생할 수 있습니다. 그래서 keyRelased() 이벤트를 사용해야합니다. 사용자가 key를 누르고 있으면 keyReleased 이벤트가 발생하기 전에 필드에 여러 문자가 입력되므로 문제가 발생할 수 있습니다.

가장 좋은 해결책은 문서 수신기를 사용하는 것입니다. 자세한 내용은 How to Write a Document Listener에있는 스윙 튜토리얼의 섹션을 참조하십시오.

관련 문제