我有一种方法,根据点击的按钮执行另一种方法。 只有他似乎在运行两次调用的方法,我不知道为什么。谁能帮助我并向我解释为什么会这样?关注来源
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
@Override
public void eventDispatched(final AWTEvent event) {
final KeyEvent evt = (KeyEvent) event;
switch (evt.getKeyCode()) {
case KeyEvent.VK_F1: {
//F1
doSomething(); // this method is running twice
break;
}
case KeyEvent.VK_F2: {
//F2
doSomething();
break;
}
}, AWTEvent.KEY_EVENT_MASK);
由于
答案 0 :(得分:2)
问题似乎是按键和键释放的方法都在触发事件。我建议使用java.awt.event.KeyListener
,它具有用于按下和释放事件的单独事件处理程序。
答案 1 :(得分:0)
您正在收到KEY_PRESSED和KEY_RELEASED的活动。
除了具有正确KeyCode的KeyEvent
之外,还需要检查是否要确保它是正确的操作,即KEY_PRESSSED。解决此问题的一种方法是在进入switch语句之前添加对操作的检查。
Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
@Override
public void eventDispatched(final AWTEvent event) {
if (event.getKeyChar() == KeyEvent.KEY_PRESSED)
{
final KeyEvent evt = (KeyEvent) event;
switch(event.getKeyCode()){
//switch statement code
}
}
}, AWTEvent.KEY_EVENT_MASK);
您可以做的另一件事是创建KeyEventDispatcher
并将其添加到KeyboardFocusManager
,如下所示:
//create KeyEventDispatcher myKeyEventDispatcher
KeyboardFocusManager focusManager = KeyboardFocusManager.
getCurrentKeyboardFocusManager();
focusManager.addKeyEventDispatcher(myKeyEventDispatcher);
这样你只能获得关键事件,你可以自己发送