无法在Java中接收键盘输入

0 java swing keyevent keylistener jframe

我试图获得一些基本的键盘输入功能,如箭头键.但是,我没有尝试似乎工作,我一直在使用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){}
        }
Run Code Online (Sandbox Code Playgroud)

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

Hov*_*els 6

问题:

  • 您有一个实现KeyListener的类,但我没有看到您将KeyListener添加到任何组件.实现接口是不够的,但必须将KeyListener添加到组件中才能进行监听.
  • 如果使用KeyListeners,则必须注意焦点问题(如您所述).只有在被侦听的组件具有焦点时,KeyListener才有效.
  • 使用Swing应用程序时应避免使用KeyListener,最好使用Key Bindings.一个简短的搜索这个网站会告诉你在这个多次讨论,因为这问题已经被问和回答了许多由我倍,以上几种.
  • 例如:java-keylistener-not-registering-arrow-keys