Java KeyListener根本没有响应

时间:2018-01-05 17:13:28

标签: java

我正在努力制作游戏乒乓球,但我遇到了KeyListener无法正常工作的问题。 KeyListener有什么问题?它只是不工作,我查找的一切都不适合我。它似乎适用于其他人。

我在错误的地方使用它吗?

我希望有人能帮助我。

提前致谢!

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.*;

public class Paneel extends JPanel
{
    private int height, width;
    private boolean moveLeft, moveRight, moveUp, moveDown, playerMoveLeft, playerMoveRight, computerMoveLeft, computerMoveRight;
    private Timer timer;
    private Ball ball;
    private Paddle player, computer;

    public Paneel()  
    {
        ball = new Ball(994, 772);
        player = new Paddle(1, 994, 722);
        computer = new Paddle(2, 944, 722);
        TimerHandler timerHandler = new TimerHandler();
        timer = new Timer(20, timerHandler);
        timer.start();
        this.addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(KeyEvent e)
            {
                if (e.getKeyCode() == KeyEvent.VK_LEFT) playerMoveLeft = true;
                else if (e.getKeyCode() == KeyEvent.VK_RIGHT) playerMoveRight = true;
            }

            @Override
            public void keyReleased(KeyEvent e)
            {
                if (e.getKeyCode() == KeyEvent.VK_LEFT) playerMoveLeft = false;
                else if (e.getKeyCode() == KeyEvent.VK_RIGHT) playerMoveRight = false;
             }

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

            }
        });
    }

    public void paintComponent(Graphics pen)
    {
        super.paintComponent(pen);
        ball.drawBall(pen);
        player.drawPaddle(pen);
        computer.drawPaddle(pen);
    }

    public void movePlayer() 
    {
         if (playerMoveRight == true) player.moveDown();
         else if (playerMoveLeft == true) player.moveUp();
    }

    public void moveComputer() 
    {

    }

    public void resetBall()
    {

    }

    public void resetPlayer()
    {

    }

    public void resetComputer()
    {

    }

    class TimerHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e) 
        {
            movePlayer();
            repaint();
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

通过requestFocus();我将跳转到您的面板上,这将解决问题