2011-05-14 4 views
1

여기 내 상황이 있습니다 : 자바 타이핑 게임을 개발 중이며 JTextField에 가장 적합한 수신기를 찾아야합니다.타이핑 게임에서 JTextField를 위해 어떤 리스너를 사용해야합니까?

JTextField typeBox; 

청취자는, 사용자의 입력을 감지 처리를위한 주요 게임 부분에있는 상자 안의 텍스트를 보내고, 단어의 끝이 도달하면, 유형 상자 을 삭제해야 할 수 있어야한다 (따라서 사용자는 일반적인 타이핑 게임 에서처럼 한 번에 한 단어 씩 입력 할 수 있습니다). 나는 모든 KeyListener

사용자가 새 키가 손실되어, 키를 해제하지 않고 단어의 결말에 도달하고, 즉시 다른 키를 입력 할 때 이것의 문제가
public class TypeBoxListener implements KeyListener 
    { 
     @Override 
     public void keyPressed(KeyEvent arg0) { 
     } 

     @Override 
     public void keyReleased(KeyEvent arg0) { 
      if (arg0.getKeyChar() == arg0.CHAR_UNDEFINED) return; 
      String typedText = typeBox.getText(); 
      thisGUI.processUserInput(typedText); 
     } 

     @Override 
     public void keyTyped(KeyEvent arg0) { 
     } 
    } 

을 시도했습니다.

나는 또한 내가 IllegalStateException가가를 수정하려고 얻을 것이기 때문에이 방법은 훨씬 더 반응의 keyReleased은, 그러나, 나는이 방법을 사용하여 텍스트 상자를 지울 수 없습니다 사용하는 것보다의 DocumentListener

public class TypeBoxListener implements DocumentListener 
{ 
    @Override 
    public void changedUpdate(DocumentEvent arg0) { 
    } 

    @Override 
    public void insertUpdate(DocumentEvent arg0) { 
     String typedText = paragraphPanel.typeBox.getText(); 
     thisGUI.processUserInput(typedText); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent arg0) { 
     String typedText = paragraphPanel.typeBox.getText(); 
     thisGUI.processUserInput(typedText); 
    } 
} 

시도 DocumentListener 내부의 문서.

답변

1

텍스트 박스 비우기 코드를 Runnable으로 정의하고 SwingUtilities.html.invokeLater을 통해 실행하여 IllegalStateException을 해결할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 당신의 제안을 들여다 볼 것입니다. – hoangbv15

+0

그것은 일했다! 대단히 감사합니다. – hoangbv15

관련 문제