因为此方法正在运行两次操作



我有一种方法,他根据单击按钮执行另一种方法。只有他似乎正在运行两次所谓的方法,而我不知道为什么。谁能帮助我并向我解释为什么这是什么?遵循源

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);

谢谢

问题似乎是键盘和键发布的方法都在触发事件。我建议使用java.awt.event.KeyListener,该CC_1具有单独的事件处理程序,用于新闻和发布事件。

您正在收到key_pressed and key_realed的事件。

您还需要检查是否具有正确的键代码,还需要确保它是正确的操作,即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);

这样,您只会获得关键事件,您可以自己派遣

最新更新