我正在尝试获取键盘输入并根据按下的按钮设置布尔值。我在播放器类之一中创建该类的实例以更新位置,这是我的代码:

public class Keyboard extends KeyAdapter implements KeyListener
{
boolean downClick, upClick, leftClick, rightClick = false;

public Keyboard()
{
    Game.getGame().getFrame().addKeyListener(new KeyAdapter())
}

public void keyPressed(KeyEvent e)
{
    if (e.getKeyCode() == KeyEvent.VK_DOWN) downClick = true;
    else if (e.getKeyCode() == KeyEvent.VK_UP) upClick = true;
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) leftClick = true;
    else if (e.getKeyCode() == KeyEvent.VK_RIGHT) rightClick = true;
}

public void keyReleased(KeyEvent e)
{
    if (e.getKeyCode() == KeyEvent.VK_DOWN) downClick = false;
    else if (e.getKeyCode() == KeyEvent.VK_UP) upClick = false;
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) leftClick = false;
    else if (e.getKeyCode() == KeyEvent.VK_RIGHT) rightClick = false;
}

public boolean isDownClick()
{
    return downClick;
}

public boolean isUpClick()
{
    return upClick;
}

public boolean isLeftClick()
{
    return leftClick;
}

public boolean isRightClick()
{
    return rightClick;
}

}


我非常肯定Game.getGame().getFrame().addKeyListener(new KeyAdapter())是不正确的。只是为了澄清Game.getGame().getFrame()只是得到我的JFrame。 addKeyListener想要什么作为参数?这是我代码中的唯一问题,因为输入没有移动我的屏幕组件。组件代码有效且工作正常。仅此一类中没有错误。

最佳答案

不要将KeyListener用于此类工作,请使用键绑定API,它可以更好地控制生成键事件所需的焦点级别。有关更多详细信息,请参见How to Use Key Bindings

问题是多层次的...

首先,KeyListener仅在该组件是可聚焦且具有焦点的组件上才会引发事件。

其次,在用户和实际框架之间,存在许多层...



...其中任何一个都可能夺取框架的焦点并阻止事件到达框架...

10-04 23:41