0

我正在尝试获得一些基本的键盘输入功能,例如箭头键。但是,我尝试的任何方法似乎都不起作用,我一直在使用 KeyListener 接口,检查输入的 JPanel 获得焦点,并且似乎没有错误。

    public class PlayField extends JPanel implements KeyListener
    {
        private SpelModel mijnmodel;
        private boolean rechts = false;
        private boolean links = false;

        public PlayField(SpelModel mijnmodelArg)
        {
            setBackground(Color.WHITE); 
            mijnmodel = mijnmodelArg;
            this.setFocusable(true);
        }

        @Override
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g); //some methods that i've taken out of the example
            drawStones(g,mijnmodel.getStenen());
            drawPeddle(g,mijnmodel.getBat());
            drawBall(g,mijnmodel.getBall()); 
        }
        @Override
        public void keyPressed(KeyEvent e){
            System.out.println("Key Pressed!!!");           
    }

    //Called when the key is released   
        @Override
    public void keyReleased(KeyEvent e){
        System.out.println("Key Released!!!");          
        }

        //Called when a key is typed
        @Override
        public void keyTyped(KeyEvent e){}
        }

问题可能是我正在使用多个类来创建一个窗口(第一个 JFrame,然后是一个包含 2 个 JPanel 的 JPanel,其上是“PlayField”类)​​并且无法在另一个面板中实现焦点?最好的行动方案是什么?

4

1 回答 1

6

问题:

  • 您有一个实现 KeyListener 的类,但我没有看到您将 KeyListener 添加到任何组件。实现接口是不够的,而是必须将 KeyListener 添加到组件中才能进行侦听。
  • 如果您使用 KeyListeners,则必须注意焦点问题(如您所述)。KeyListener 仅在被侦听的组件具有焦点时才有效。
  • Swing 应用程序应避免使用 KeyListener,最好使用Key Bindings。对该网站的简短搜索将向您展示有关此问题的许多讨论,因为这个问题已被多次询问和回答我不止几次。
  • 例如:java-keylistener-not-registering-arrow-keys
于 2013-01-14T23:05:55.220 回答