当前位置: 首页 > 知识库问答 >
问题:

Java-KeyListener:如何激发事件?

韦衡
2023-03-14

我在一个KeyListener中为一个非常简单的游戏编程控件。伊芙得到了下面的问题。

我做了类似的事情(只是一个简单的示例,而不是我实现的代码):

public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            leftPressed = true;
            Methodxyz(leftpressed,rightpressed,uppressed)
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            rightPressed = true;
            Methodxyz(leftpressed,rightpressed,uppressed)
        }
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            upPressed = true;
            Methodxyz(leftpressed,rightpressed,uppressed)
        }
    } 

public void keyReleased(KeyEvent e) {           
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            leftPressed = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            rightPressed = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            upPressed = false;
        }
    }

如果我同时按下两个键(左,上),你就可以移动charachter对角线。问题是监听器与最后一个按下的KeyEvent一起工作,所以如果我先按左再向上,但没有释放左再向上,对象就不会移动(仍然按左)。

我怎么处理?是否可以在我的keylistener的keypressed方法中激发keypressed事件,直到leftpressed为false?

有什么想法吗?

提前致谢

共有1个答案

谢墨竹
2023-03-14
public void update() {

        if (up == true) {
            SomeMethod(Key.UP);
        }
        if (down == true) {
            SomeMethod(Key.DOWN);
        }
        if (left == true) {
            someMethod(Key.LEFT);
        }
        if (right == true) {
            someMethod(Key.RIGHT);
        }


}
    public void keyReleased(KeyEvent e) {
    switch (e.getKeyCode()) {
    case KeyEvent.VK_S:
        down = false;
        break;
    case KeyEvent.VK_W:
        up = false;
        break;
    case KeyEvent.VK_A:
        left = false;
        break;
    case KeyEvent.VK_D:
        right = false;
        break;
    }
}

public void keyPressed(KeyEvent e) {
    switch (e.getKeyCode()) {
    case KeyEvent.VK_S:
        down = true;
        break;
    case KeyEvent.VK_W:
        up = true;
        break;
    case KeyEvent.VK_A:
        left = true;
        break;
    case KeyEvent.VK_D:
        right = true;
        break;
 类似资料:
  • 问题内容: 我正在使用Selenium WebDriver语法。我知道,在基于Selenium服务器的语法中,您可以执行以下操作来触发javascript事件: 如何在使用WebDriver(例如FirefoxDriver)创建的应用程序中执行相同操作? 问题答案: 不幸的是,Selenium WebDriver设计人员明确决定不在 Selenium 2中包含此功能。 明智的决定是不将此功能包含在

  • 问题内容: 我正在使用Selenium WebDriver语法。我知道,在基于Selenium服务器的语法中,您可以执行以下操作来触发javascript事件: 如何在使用WebDriver(例如FirefoxDriver)创建的应用程序中执行相同操作? 问题答案: 不幸的是,Selenium WebDriver设计人员明确决定不在 Selenium 2中包含此功能。 明智的决定是不将此功能包含在

  • 问题内容: 我目前正在尝试在程序中实现一个键侦听器,以便当我按下箭头键时它会执行一个操作,程序中的对象向左或向右移动。 这是我程序中的移动方法 我想知道程序应该如何读入(KeyEvent)e。我真的不能输入箭头键。 请帮忙! 编辑:我还需要知道我需要添加到代码中的内容,以便我的程序在继续使用另一种方法之前要等待大约700毫秒的时间才能进行键输入 问题答案: http://docs.oracle.c

  • 问题内容: 我有一个使用从扩展的类的子类 我将一个对象添加到框架-中。现在,当我按下任意键盘键时,不会调用任何方法,并且似乎没有窗口焦点。我也尝试过调用,但仍然没有响应。 如何使它响应按键? 问题答案: 您是否为面板设置了面板本身?另外,您可能需要将面板设置为可聚焦。我通过此代码对其进行了测试,它似乎可以正常工作

  • 在我的代码中,我有: 带有普通JPanel的JFrame,其中包含一些JComponent对象。这些JComponents有:-一个JTextFields列表。-一个侦听器,当鼠标插入时高亮显示边框,当鼠标退出时隐藏边框。如果鼠标在jceeExit方法的边框上嵌套,那么当鼠标在jceeExit方法的边框上嵌套时,也会触发jceeExit: 问题是: 代码: 代码是为了解决上述问题而编写的。以下是J