有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的KeyListener不读取键?

我正在用JPanelGraphics来做游戏。我已经实现了一个KeyListener,并将它添加到了我的JPanel。然而,我无法让它读取钥匙码。我添加了一个print语句,我假设它会在按下某个键时打印,但我按下的键都不会返回代码。这是我的JPanel构造函数:

public Game()
{
    super();
    JPanel mazepanel = new JPanel();
    this.add(mazepanel);
    this.setVisible(true);
    this.addMouseListener(this);
    this.addKeyListener(this);
}

这是我的KeyListener

public void keyTyped(KeyEvent kb)
{
    System.out.println("Key pressed: " + kb.getKeyCode());
    if (kb.getKeyCode() == KeyEvent.VK_UP)
    {
        forward = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_LEFT)
    {
        left = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_RIGHT)
    {
        right = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_DOWN)
    {
        back = true;
    }
    else
    {

    }

    this.repaint();
}

共 (2) 个答案

  1. # 1 楼答案

    默认情况下,您的JPanel不可聚焦。加

    setFocusable(true);
    

    这样做

  2. # 2 楼答案

    下面是一个使用KeyListener的好例子:

    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    @SuppressWarnings("serial")
    public class KeyboardExample extends JPanel {
    
        public KeyboardExample() {
            KeyListener listener = new MyKeyListener();
            addKeyListener(listener);
            setFocusable(true);
        }
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("Mini Tennis");
            KeyboardExample keyboardExample = new KeyboardExample();
            frame.add(keyboardExample);
            frame.setSize(200, 200);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    
        public class MyKeyListener implements KeyListener {
            @Override
            public void keyTyped(KeyEvent e) {
            }
    
            @Override
            public void keyPressed(KeyEvent e) {
                System.out.println("keyPressed="+KeyEvent.getKeyText(e.getKeyCode()));
            }
    
            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println("keyReleased="+KeyEvent.getKeyText(e.getKeyCode()));
            }
        }
    }
    

    http://www.edu4java.com/en/game/game4.html