JPanel에서 KeyListener가 응답하지 않음: 일반적인 문제
KeyListener를 사용하여 JPanel 내에서 키 입력을 감지할 때 개발자는 종종 다음과 같은 문제에 직면합니다. 리스너가 원하는 작업을 트리거하지 못합니다. 이 문제는 여러 요인으로 인해 발생할 수 있습니다.
핵심 구성 요소 제약 조건
KeyListener는 올바르게 작동하기 위해 초점 구성 요소에 자신을 연결하는 데 의존합니다. 기본적으로 포커스는 JPanel에 자동으로 부여되지 않습니다. 이 문제를 해결하려면 포커스 가능성을 명시적으로 설정하고 JPanel 생성자 내에서 포커스를 요청하십시오.
public JPanel extends JPanel implements KeyListener {
public JPanel() {
this.addKeyListener(this);
this.setFocusable(true);
this.requestFocusInWindow();
}
대안: 키 바인딩
초점을 수동으로 설정하는 것도 실행 가능한 솔루션이지만 보다 강력한 접근 방식은 키 바인딩을 활용하는 것입니다. 키 바인딩은 키 입력을 특정 작업과 연결하는 유연한 메커니즘을 제공합니다. JPanel에서 키 바인딩을 구현하려면:
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");
}
}
}
이 예에서 leftAction 클래스는 왼쪽 화살표 키를 눌렀을 때 수행될 작업을 정의합니다(이 경우 콘솔에 "test"를 인쇄함).
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3