>Java >java지도 시간 >내 JPanel에서 내 KeyListener가 작동하지 않는 이유는 무엇입니까?

내 JPanel에서 내 KeyListener가 작동하지 않는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-28 07:32:02500검색

Why Aren't My KeyListeners Working in My JPanel?

JPanel에서 KeyListener가 응답하지 않는 문제: 일반적인 문제

KeyListener를 사용하여 JPanel 내에서 키 입력을 감지할 때 개발자는 종종 다음과 같은 문제에 직면합니다. 리스너가 원하는 작업을 트리거하지 못합니다. 이 문제는 여러 요인으로 인해 발생할 수 있습니다.

중점 구성 요소 제약 조건

KeyListener는 올바르게 작동하기 위해 집중 구성 요소에 자신을 연결하는 데 의존합니다. 기본적으로 포커스는 JPanel에 자동으로 부여되지 않습니다. 이 문제를 해결하려면 포커스 가능성을 명시적으로 설정하고 JPanel 생성자 내에서 포커스를 요청하세요.

<code class="java">public JPanel extends JPanel implements KeyListener {

    public JPanel() {
        this.addKeyListener(this);
        this.setFocusable(true);
        this.requestFocusInWindow();
    }</code>

대안: 키 바인딩

포커스를 수동으로 설정하는 것은 실행 가능한 솔루션인 경우 보다 강력한 접근 방식은 키 바인딩을 활용하는 것입니다. 키 바인딩은 키 입력을 특정 작업과 연결하기 위한 유연한 메커니즘을 제공합니다. JPanel에서 키 바인딩을 구현하려면:

<code class="java">public JPanel extends JPanel implements ActionListener {

    public JPanel() {
        setupKeyBinding();
        this.setFocusable(true);
        this.requestFocusInWindow();
    }

    private void setupKeyBinding() {
        int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
        InputMap inMap = getInputMap(condition);
        ActionMap actMap = getActionMap();

        inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left");
        actMap.put("Left", new leftAction());
    }

    private class leftAction extends AbstractAction {

        public void actionPerformed(ActionEvent e) {
            System.out.println("test");
        }
    }
}</code>

이 예에서 leftAction 클래스는 왼쪽 화살표 키를 누를 때 수행할 작업을 정의합니다(이 경우 콘솔에 "test"를 인쇄함). .

위 내용은 내 JPanel에서 내 KeyListener가 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.