> Java > java지도 시간 > 내 JFrame의 KeyListener가 응답하지 않는 이유는 무엇입니까?

내 JFrame의 KeyListener가 응답하지 않는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-13 13:25:02
원래의
516명이 탐색했습니다.

Why Isn't My JFrame's KeyListener Responding?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿