【问题标题】:is there a way to use keyPressed in KeyListener like the mouseClicked in the MouseListener in Java? [closed]有没有办法在 KeyListener 中使用 keyPressed,就像 Java 中 MouseListener 中的 mouseClicked 一样? [关闭]
【发布时间】:2018-02-25 18:10:03
【问题描述】:

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

【问题讨论】:

  • 请发布您尝试过但不起作用的代码。
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用edit 链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!
  • 你应该改用key bindings API

标签: java keylistener


【解决方案1】:

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

boolean b = false;

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

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

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

【讨论】:

  • 嗯,就这么简单...谢谢!
  • 如果你想对多个键执行此操作,你应该将布尔值放在一个数组中。此外,如果您有一个循环,您可以使用布尔值来更好地检测密钥。
  • 您还可以将答案标记为正确或点赞。
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多