2014-01-08 1 views
0

JPanel은 이벤트에 매우 이상하게 반응합니다. MouseEvent는 처리 할 수 ​​있지만 KeyEvent는 처리하지 않습니다.KeyListener가 키보드 이벤트에 반응하지 않습니다. 마우스 이벤트 용 OK

인 JPanel 클래스 : 패널

public class DrawPanel extends JPanel { 
    class DrawListener extends MouseAdapter implements KeyListener { 
     @Override 
     public void mouseDragged(MouseEvent e) { 
      // works fine 
     } 
     @Override 
     public void mouseReleased(MouseEvent e) {  
      // works fine 
     } 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      // works fine 
     } 
     @Override 
     public void keyPressed(KeyEvent e) { 
      // Listener is NOT invoked here if anykey is pressed 
     } 
     @Override 
     public void keyReleased(KeyEvent e) { 
      // NOT invoked 
     } 
     @Override 
     public void keyTyped(KeyEvent e) { 
      // NOT invoked 
     } 

생성자 :

// Class constructor 
public DrawPanel() { 
     DrawListener l = new DrawListener(); 
     addMouseListener(l); 
     addMouseMotionListener(l); 
     addKeyListener(l); 
     setFocusable(true); 
     requestFocus(); 
} 

어떻게 된 MouseEvent 핸들러가 잘 작동하는 경우는 가능하다? 어디에서 잘못 될 수 있습니까?

답변

3

는 등록 된 구성 요소가 포커스 가능하고 키보드 포커스가있는 경우에만 키 이벤트에 응답합니다.

이 문제는 KeyListener의 알려진 문제입니다.

Key Bindings API을 사용하면 키 이벤트가 발생하는 포커스 레벨을 제어 할 수 있습니다.

+0

@ MadProgrammer의 답변은 평소와 마찬가지로 5 분 안에 나오며 정확하고 정확한 정보를 제공합니다. 그가 게시 한 모든 것을 자동으로 upvote 할 수있는 방법이 있습니까? :) – ccjmne

관련 문제