在我的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键时,该函数被调用了两次,一次用于键盘输入,一次用于键盘输入。如何检测是按键事件还是按键事件?

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

最佳答案

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

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

10-05 23:28