2012-03-02 2 views
2
 Jtxtfield.addKeyListener(new KeyListener() { 
     public void keyPressed(KeyEvent e) {}; 
     public void keyTyped(KeyEvent e) { 
      if(Jtxtfield.getText().equals("")) 
      System.out.println("hello1"); 
     }public void keyReleased(KeyEvent e) { 
      if(Jtxtfield.getText().equals("")) 
      System.out.println("hello2"); 
     } 
    }); 

눌려진 첫 번째 키 (예 : 'a')의 출력은 hello1입니다. 두 번째 키 (예 : 'a')를 다시 누르면 예상대로 출력되지 않습니다. 삭제 키를 두 번 누르면 hello1 hello2가 표시됩니다.KeyTyped 메서드는 TextField가 비어 있다고 말합니다.

왜 이런 일이 발생합니까? 왜 txtfield를 처리하는 keyTyped 메소드는 아무것도 가지지 않는 것처럼 보이나요? 좀 더 구체적으로 말하면, 왜 텍스트 필드에서 첫 번째 키가 눌러 진 키를 누를 때만 hello1을 얻을 수 있습니까?

답변

6

텍스트 필드는 키 누름 이벤트, 키 입력 이벤트 및 키 릴리스 이벤트의 세 가지 이벤트를 차례로 발생시킵니다. 키 입력 이벤트에는 키 코드 정보가 없습니다. 그들은 수정 자 정보도 가지고 있지 않습니다. 사용자가 입력하는 문자 만 신경 쓰면 키 입력 이벤트를 처리해야합니다. 사용자가 어떤 키를 눌렀다가 놓았는지 신경 쓰면 키 눌렀다 놓은 이벤트를 처리해야합니다. 당신이 텍스트 필드의 값이

JTextField txt = (JTextField) e.getSource(); 
System.out.println(txt.getText()); 

예를 들어의 keyReleased (KeyEvent를 전자)를 사용하려는 경우

당신은

here은 또한 당신이 DocumentListener을 사용할 수 있습니다 찾을 수 있습니다.

+1

JTextComponent를 사용하지 않는 경우 DocumentListener, – mKorbel

+0

그럼 ... 내 질문에 어떻게 대답합니까? – user678392

관련 문제