JFrame용 응답하지 않는 KeyListener: 키보드 상호 작용 잠금 해제
JFrame용 KeyListener를 구현하려는 노력 중에 다음과 같은 난처한 문제에 직면했습니다. KeyListener는 올바르게 등록되었음에도 불구하고 응답하지 않는 것처럼 보였습니다.
포커스 수수께끼
포커스가 JFrame에 있지 않다는 초기 의심은 일반적인 오해입니다. 기본적으로 JFrame은 표시될 때 포커스를 갖습니다. 그러나 JFrame에서 requestFocus()를 호출하여 다시 확인할 가치가 있습니다.
KeyEventDispatcher 소개
포커스가 원인이 아닌 경우 KeyEventDispatcher 사용을 고려하세요. 이 강력한 메커니즘을 사용하면 포커스가 있는 구성 요소에 관계없이 주요 이벤트를 캡처할 수 있습니다.
샘플 코드
다음 코드 조각은 JFrame에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!