KeyListener 不对键盘事件做出反应.鼠标事件正常



JPanel 对事件的反应非常奇怪。它可以处理 MouseEvent,但不会处理 KeyEvent。

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();
}

如果鼠标事件处理程序工作正常,这怎么可能?哪里可能出错?

KeyListener 只有在注册到的组件可聚焦且具有键盘焦点时才会响应关键事件。

这是 KeyListener 的已知问题。

最佳选择是使用键绑定 API,该 API 允许您控制关键事件将发生的焦点级别。

相关内容

  • 没有找到相关文章

最新更新