【问题标题】:Not sure why my KeyListener isn't working?不知道为什么我的 KeyListener 不工作?
【发布时间】: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)。
  • 例如请看this similar question
  • 我在 IDE 中尝试了代码,它运行良好。每次输入 if 时添加一个System.out.println 以确保。我认为问题可能出在Projectile 对象上。
  • KeyListener not working? 的可能副本
  • 如果你已经阅读了我给你的搜索结果,你已经知道最好的解决方案:不要使用 KeyListeners,使用 Key Bindings。包括我自己、camickr 和 MadProgrammer 在内的任何 Swing 专家都会告诉你这一点。

标签: java swing keylistener


【解决方案1】:

只看这个问题右侧的列,您可以看到至少有 10 个问题标题为“KeyListener is not working?”或类似的东西。发帖前先看看周围。

至于解决方案,根据我的经验,KeyListeners 从关注的焦点中获取事件。将它们添加到 JFrame 上的 JPanel 不会返回任何事件,但将它们直接添加到 JFrame 可能会有所帮助。

【讨论】:

  • 我都看过了。小组已聚焦并启用,并添加了 keylistener,其他问题的所有问题都存在
  • @Silimerse:再一次,根据您发布的课程,我们无法猜测可能出了什么问题。据我们所知,您可能有另一个组件窃取焦点。这种信息对我们没有帮助:"I know I have all the correct code because I have looked at about 15 different tutorials..."。你知道你的代码在某个地方是不正确的——如果它是正确的,它就可以工作,纯粹而简单。如果您真的想知道为什么您的 实现 KeyListener 不起作用,您需要发布minimal reproducible example。期间。
  • 你试过我的解决方案了吗?我对“焦点”部分给出了最好的猜测,但我从大量经验中知道将关键侦听器添加到窗口而不是面板工作。这样做。
猜你喜欢
  • 2013-07-27
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多