JFrame용 KeyListener를 구현하려고 시도하는 동안 개발자는 당황스러운 문제에 직면했습니다. KeyListener가 응답하지 않는 것 같았습니다. , 키를 눌렀을 때 콘솔에 메시지가 나타나지 않습니다. 개발자는 JFrame에 포커스가 부족하다고 의심하여 도움을 요청했습니다.
자세히 조사한 결과 KeyListener가 실제로 올바르게 추가되고 포커스가 적절하게 설정되었음을 발견했습니다. 그러나 중요한 요소가 누락되었습니다. 즉, 주요 이벤트를 KeyListener에 전파하는 메커니즘입니다.
해결책은 KeyEventDispatcher를 사용하는 데 있습니다. 이 디스패처는 JFrame 내의 내부 클래스로 정의되고 KeyboardFocusManager에 추가될 수 있습니다. 디스패처의 dispatchKeyEvent 메서드는 keyPressed, keyReleased 및 keyTyped를 포함한 모든 키 이벤트를 처리합니다. 이 메커니즘을 구현함으로써 KeyListener는 주요 이벤트를 효과적으로 캡처하고 응답할 수 있습니다.
다음은 KeyEventDispatcher를 통합하는 수정된 코드 샘플입니다.
public class MyFrame extends JFrame { private class MyDispatcher implements KeyEventDispatcher { @Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { System.out.println("tester"); } else if (e.getID() == KeyEvent.KEY_RELEASED) { System.out.println("2test2"); } else if (e.getID() == KeyEvent.KEY_TYPED) { System.out.println("3test3"); } return false; } } public MyFrame() { add(new JTextField()); System.out.println("test"); KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.addKeyEventDispatcher(new MyDispatcher()); } public static void main(String[] args) { MyFrame f = new MyFrame(); f.pack(); f.setVisible(true); } }
이 수정을 통해 KeyListener는 이제 주요 이벤트를 성공적으로 수신하고 처리하여 콘솔에 예상되는 출력을 제공합니다.
위 내용은 JFrame의 KeyListener가 키 누름에 응답하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!