java - 未检测到按下两个箭头 - java swing

标签 java swing

我有一个问题。我实现了一些简单的函数,按下箭头时会调用这些函数。

    public void keyPressed(KeyEvent e)
    {
        int key = e.getKeyCode();
        if(key == KeyEvent.VK_LEFT)
        {

            double t = p.getAngle();
            if(p.getIsTurning())
                t+=3;
            else
                t+=6;
            p.setAngle(t);
            p.setIsTurinig(true);

        }
        else if(key == KeyEvent.VK_UP)
        {
            p.setVelX(p.getVelX()+p.getAcceleration());
            p.setIsAccelerating(true);
        }       
}

当我按向上箭头然后向左时,一切正常。但是,当我按向左箭头,然后按向上箭头时,仅检测到向上箭头功能。

什么可能导致问题?

最佳答案

if 都不会真正检测到同时按下向左键和向上箭头键。该事件将仅返回最后按下的键。即使您按下向上箭头,然后按下向左箭头键,您真正检测到的只是向左箭头键。您很可能按下向下和向左箭头键,并且会触发相同的 IF 条件。

检测是否同时按下多个键的一种方法是创建 boolean 标志来指示哪些所需的键被按下,哪些没有按下,但您还需要利用 KeyReleased 事件,以便在释放特定键时伪造必要的标志。 boolean 标志对于键盘事件应该是全局的,例如:

boolean keyOne = false;    // flag for LEFT Arrow key
boolean keyTwo = false;    // flag for UP Arrow key

public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();
    if(key == KeyEvent.VK_LEFT) { keyOne = true; }
    else if(key == KeyEvent.VK_UP) { keyTwo = true; }

    if (keyOne && !keyTwo) {
        System.out.println("Only the LEFT Arrow key is pressed!");
    }
    else if (!keyOne && keyTwo) {
        System.out.println("Only the UP Arrow key is pressed!");
    }
    else if (keyOne && keyTwo) {
        System.out.println("Both LEFT Arrow and UP Arrow keys are pressed!);
    }
}

public void keyReleaseded(KeyEvent e) {
    int key = e.getKeyCode();
    if(key == KeyEvent.VK_LEFT) { keyOne = false; }
    else if(key == KeyEvent.VK_UP) { keyTwo = false; }   
}

至少有这样的效果......

将所需的代码放入 (keyOne && keyTwo) if 条件中。

关于java - 未检测到按下两个箭头 - java swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40050673/

相关文章:

java - 带有 UI 切换的 Java 中的生产者消费者

Java:获取 JFrame 内容的大小

java - 使用 Tomcat 的 Eclipse 中的 HTTP 状态 404 错误

java - 如何在 Java 中以编程方式解析 PKCS12 文件?

java - 以板格式将 2D 数组打印到控制台

java - 如何随机选择遍历列的数据并在 Mysql DB 中形成一行?

Java Swing MigLayout,将跨行中的两个元素居中

java - 获取用户在其他类中输入的文本

java - JFrame 重绘();如何使用线程信息更新 JFrame?

java - HibernateSearch ElasticSearch集成错误: Exception in thread "main" java. lang.ExceptionInInitializerError