Key Listener无法在JApplet中工作

时间:2015-05-18 20:34:48

标签: java swing applet keyboard-events

这是一种打破砖型游戏,用户不能让球落在球拍下方。顺便说一句,paddle_x设置了桨的x坐标。我有一个非常好的MouseListener,但KeyListener没有。我想知道我做错了什么,如果有人有任何建议。

public PaintSurface() {
    addMouseMotionListener(new MouseMotionAdapter() 
    {
        public void mouseMoved(MouseEvent e)
        {
            if (e.getX() - 30 - paddle_x > 5)
                english  = 1.5f;
            else if(e.getX() - 30 - paddle_x < -5)
                english = - 1.5f;
            else
                english = 1.0f;
            paddle_x = e.getX() - 30;
        }
    });
    addKeyListener(new KeyListener() {

        @Override
        public void keyTyped(KeyEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyPressed(KeyEvent e) {
            // TODO Auto-generated method stub
            if(e.getID() == KeyEvent.KEY_TYPED){
                if(e.getKeyChar() == KeyEvent.VK_RIGHT){
                    paddle_x += 30;
                }
                else if (e.getKeyChar() == KeyEvent.VK_LEFT){
                    paddle_x -= 30;
                }
            }
        }
    });


    ball = new Ball(20);

}

1 个答案:

答案 0 :(得分:3)

注册KeyListener的组件必须focus才能触发KeyListener。在组件上调用requestFocus以请求组件具有焦点,或使用KeyBindings(推荐)

此外,keyPressed方法有一个条件,可以根据KeyEvent.KEY_TYPED事件检查ID(这将永远不会发生)。