【发布时间】:2015-12-16 03:59:44
【问题描述】:
不完全确定为什么这不起作用...我实现了 KeyListener 并将其添加到我的面板中,这令人沮丧...发布的代码是唯一与 KeyListener 相关的内容。我已经尽我所能使用 JFrame 来键入和移动所有代码到任何有意义的地方。我知道我有所有正确的代码,因为我在这里查看了大约 15 个不同的教程和一堆问题。请帮忙!
public class Dodgem extends JPanel implements KeyListener, ActionListener
{
public Dodgem()
{
addKeyListener(this);
setFocusable(true);
setPreferredSize(new Dimension(640,480));
player = new Projectile();
counter = 0;
t = new Timer(5, this);
t.start();
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
System.out.println("Key Pressed");
if(e.getKeyCode() == KeyEvent.VK_UP)
{
player.setVelY(-2);
}
if(e.getKeyCode() == KeyEvent.VK_DOWN)
{
player.setVelY(2);
}
if(e.getKeyCode() == KeyEvent.VK_LEFT)
{
player.setVelX(-2);
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT)
{
player.setVelX(2);
}
}
@Override
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN)
{
player.setVelY(0);
}
if(e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT)
{
player.setVelX(0);
}
}
【问题讨论】:
-
如果没有您的minimal reproducible example,很难确切地说出它为什么不起作用,但我猜这是因为大多数 KeyListener 都存在同样的问题。这个问题问得太普遍了——你问之前有searched this site for common problems associated with KeyListeners吗?我不得不问,因为您没有显示足够的关于您的问题的信息来表明您有(如果您进行了体面的搜索,您可能会使用 Key Bindings)。
-
我在 IDE 中尝试了代码,它运行良好。每次输入 if 时添加一个
System.out.println以确保。我认为问题可能出在Projectile对象上。 -
KeyListener not working? 的可能副本
-
如果你已经阅读了我给你的搜索结果,你已经知道最好的解决方案:不要使用 KeyListeners,使用 Key Bindings。包括我自己、camickr 和 MadProgrammer 在内的任何 Swing 专家都会告诉你这一点。
标签: java swing keylistener