有没有办法在KeyListener中使用keyPressed,就像Java中的MouseListener中的mouseClicked一样?

时间:2018-02-25 18:10:03

标签: java keylistener

KeyListener工作正常,但我无法弄清楚如何只执行一行代码,类似于MouseListener类中的mouseClicked。 (当我按下一个键时,它将循环执行代码直到释放该键,我只希望每次按下它时执行一次)

编辑:这是游戏中的暂停功能

代码:

    public void keyPressed(KeyEvent e) {
    toggleKey(e.getKeyCode(), true);

    }


    public void keyReleased(KeyEvent e) {

    if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
        //toggleKey(e.getKeyCode(), true);
    } else {
        toggleKey(e.getKeyCode(), false);
    }


    }
    public boolean paused = false;
    public void toggleKey(int keyCode, boolean isPressed) {

    if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP)      {up.toggle(isPressed);}
    if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN) {down.toggle(isPressed);}
    if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT) {left.toggle(isPressed);}
    if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT) {right.toggle(isPressed);}
    if (keyCode == KeyEvent.VK_ESCAPE) {
        pause.toggle(isPressed);
    }
}

类尝试使用它:

    if (input.pause.isPressed()) {
     input.paused = true;
    if (input.paused & input.pause.isPressed()) {
    paused = false;
    }
    }
    if (!input.paused) {
    frames++;
    render();
    }

1 个答案:

答案 0 :(得分:1)

最简单的方法是检测它是否是第一次运行。

boolean b = false;

@Override
public void keyPressed(KeyEvent arg0) {
     if(!b){
          //do stuff
     }
     b = true;
}

@Override
public void keyReleased(KeyEvent arg0) {
     b = false;
}

此代码的问题在于您无法同时按住多个键,解决此问题的方法是为您要使用的每个键使用不同的布尔值。