在我的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)