我正在尝试获取键盘输入并根据按下的按钮设置布尔值。我在播放器类之一中创建该类的实例以更新位置,这是我的代码:
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
仅在该组件是可聚焦且具有焦点的组件上才会引发事件。
其次,在用户和实际框架之间,存在许多层...
...其中任何一个都可能夺取框架的焦点并阻止事件到达框架...