2009-09-12 2 views
1

이렇게 만들려고합니다. 사용자가 필드에 텍스트를 입력 할 때마다 키 수신기를 사용하여 검색하십시오. 키 이벤트가 트리거 될 때마다 JTextField에서 텍스트의 길이()를 가져옵니다. length> = limit 인 경우 편집을 비활성화하십시오. 그러나 삭제 키를 누르면 JTextField의 마지막 문자를 제거하고 setEditable (true)을 제거합니다. 내 문제는 어떻게 JTextField 마지막 문자를 제거하는 것입니다? 이미 맞습니까? 왜냐하면 그건 효과가 없었어. 고마워.KeyListener (KeyPressed)가 작동하지 않습니다.

public void keyPressed(KeyEvent evt) 
    { 
    } 
public void keyReleased(KeyEvent evt) 
    { 
     int limit = 1; 
    JTextField text = (JTextField)evt.getSource(); 
     if (text.getText().length() >= limit) 
        { text.setEditable(false); } 
     else 
      if(evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) 
       { answer =""; 
        text.setEditable(true); 
         }   
    } 
public void keyTyped(KeyEvent evt) 
    { 
    } 
} 

답변

1

가 SwingUtilities.invokeLater 블록에 전체 이벤트 핸들러를 포장하십시오 :

여기 내 코드의 일부이다. 이벤트 처리 및 GUI 업데이트를 스윙이 두 이벤트 발송 쓰레드에서 수행되기 때문에

public void keyReleased(KeyEvent evt) 
    { 
     final int limit = 1; 
     final int keyCode = evt.getKeyCode(); 
     final JTextField text = (JTextField)evt.getSource(); 

     SwingUtilities.invokeLater(new Runnable(){ 

      public void run() { 
       if (text.getText().length() >= limit) 
       { 
        text.setEditable(false); 
       } 
       else if(keyCode == KeyEvent.VK_BACK_SPACE) 
       {  
        answer =""; 
        text.setEditable(true); 
       } 
      } 
     });       
    } 

,이는 text.getText() 메소드가 입력 한 모든 텍스트를 검색 할 수 있도록 필요할 수 있습니다.

+0

위대한 트릭! 과거에 이런 유형의 이벤트에 문제가 있었지만 이것이 아직 가장 좋은 해결 방법입니다. 헤이, 에리에타, 해결책으로 그의 포스트를 받아 들일 것을 고려해야합니다. – Jeach

관련 문제