Java KeyListener根本没有响应

Java KeyListener根本没有响应,java,Java,我试图使游戏乒乓球,但我有问题的关键是听不到工作。KeyListener有什么问题?它只是不起作用,我查到的所有东西对我都不起作用。它似乎对其他人有用 我用错地方了吗 我希望任何人都能在这方面帮助我 提前谢谢 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.eve

我试图使游戏乒乓球,但我有问题的关键是听不到工作。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();
        }
    }
}

通过
requestFocus()在面板上设置焦点我希望这能解决问题

谢谢你的回答。太糟糕了,它不起作用。KeyListener只有在拥有它的ojebct集中精力以便您可以使用另一个解决方案时才起作用(不是好的解决方案,但总是能工作)。。另一种解决方案是将密钥列表器添加到所有面板对象,例如,如果有一个带有两个按钮的面板(btn 1,btn2)将您的KeyListener添加到它们中btn1和BTN2我的面板上没有对象,但绘制了objectsAdd
println
语句,或者在调试器中运行该语句,以查看实际调用的代码块。在调试过程中,它甚至不输入keypressed方法。我也不会打印一行,而不仅仅是键侦听器。在你的代码里。找出被称为什么。旁注:我不认为你的代码是线程安全的,即使你是多线程的。我对线程知之甚少。对于其余部分,一切都很好,您需要线程知识来完成GUI工作。特别是当您显式地启动一个单独的线程时(计时器对象)。