按住键时,键绑定会多次触发

时间:2012-03-24 10:06:01

标签: java swing

我正在关注this指南,以便在我的应用程序中使用键绑定。到目前为止,当我按下一个键时,键绑定成功触发。我期望发生的是当我将一个动作绑定到一个键按下事件而另一个动作绑定到一个键释放事件时,它将在按下该键时触发第一个动作,并在释放该键时触发第二个动作。当我按住某个键时实际发生的事情是这两个动作都被多次调用。我该怎样做才能实现我想要的行为?

以下是我实现密钥绑定的方法:

component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("pressed UP"), "pressedUP");
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released UP"), "releasedUP");

Action pressedUpAction = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("Pressed UP");
    }           
};

Action releasedUpAction = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("Released UP");
    }           
};

component.getActionMap().put("pressedUP", pressedUpAction);
component.getActionMap().put("releasedUP", releasedUpAction);

当我运行程序时,按住向上键时实际得到的输出是Pressed UP,稍微停顿,然后是多个Pressed UP值。当我发布up键时,我收到一条Released UP消息。整个输出如下所示:

Pressed UP
Pressed UP
Pressed UP
Pressed UP
Pressed UP
Pressed UP
Pressed UP
Released UP

真正奇怪的是,如果我用键盘字母键替换UP,例如P,那么一切都按预期工作。

1 个答案:

答案 0 :(得分:7)

  • Swing Action内使用Boolean值一次性触发事件,然后将Booleanfalse更改为true,反之亦然

  • 对不起,我不知道您是如何实施的KeyBindings,发布了SSCCE