KeyEventDispatcher在Java中调用了两次

时间:2014-11-10 15:10:12

标签: java swing keyevent

在我的Swing应用程序中,我需要设置一些全局键绑定。我为此使用KeyEvent Dispatcher,如下所示:

public class MyKeyEventDispatcher implements KeyEventDispatcher
{

    @Override
    public boolean dispatchKeyEvent(KeyEvent e)
    {
        if (!e.isConsumed())
        {
            if (e.getKeyCode() == KeyEvent.VK_F8)
            {
                System.out.println("F8");
                e.consume();
                return true;
            }
        }
        return false;
    }
}

我的问题是,当我按下F8时会调用两次,一次用于keyup,一次用于keydown。如何检测是否是keyup或keydown事件?

我以为我在这里找到了答案:dispatchKeyEvent() invoking twice,但不幸的是,这只适用于Android。

1 个答案:

答案 0 :(得分:1)

答案来自@biziclop的评论:使用e.getID()来检测关键事件。还注意到我应该检查修改器以避免在Shift + F8,Ctrl + F8等上触发。

(e.getKeyCode() == KeyEvent.VK_F8 && e.getID() == KeyEvent.KEY_PRESSED && e.getModifiers() == 0)