Java KeyListener根本没有响应
我试图使游戏乒乓球,但我有问题的关键是听不到工作。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
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我的面板上没有对象,但绘制了objectsAddprintln
语句,或者在调试器中运行该语句,以查看实际调用的代码块。在调试过程中,它甚至不输入keypressed方法。我也不会打印一行,而不仅仅是键侦听器。在你的代码里。找出被称为什么。旁注:我不认为你的代码是线程安全的,即使你是多线程的。我对线程知之甚少。对于其余部分,一切都很好,您需要线程知识来完成GUI工作。特别是当您显式地启动一个单独的线程时(计时器对象)。