KeyListener和KeyBinding问题

时间:2016-12-09 19:10:25

标签: java swing keylistener

我最近做了坦克游戏,但我遇到了一个严重的问题。对于键盘输入我使用了KeyListener,但在播放过程中,突然,KeyListener没有响应。钥匙刚停止工作。我在互联网上寻找问题,我发现许多答案说我应该使用KeyBinding。我这样做了,但问题又出现了。我该怎么办?

这只是KeyBinding的一小段代码。

public Action redTankBackwardReleased = new AbstractAction("action") {
    private static final long serialVersionUID = 1L;
    public void actionPerformed(ActionEvent e) {
        Game.redTank.xSpeed = 0;
        Game.redTank.ySpeed = 0;
    }
};

panel.getInputMap().put(KeyStroke.getKeyStroke("released DOWN"), "8");
panel.getActionMap().put("8", redTankBackwardReleased);

一切都很完美,但几秒钟或一分钟之后,钥匙就停止响应......我不明白。

1 个答案:

答案 0 :(得分:2)

您使用的是错误的InputMap。您应该使用与int常量JComponent.WHEN_IN_FOCUSED_WINDOW关联的那个。它应该像

KeyStroke releasedDown = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, true);
int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
InputMap inputMap = panel.getInputMap(condition);
ActionMap actionMap = panel.getActionMap(); // there's only one ActionMap

// then use as you normally would
inputMap.put(....);
actionMap.put(...);