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

时间:2016-10-14 19:28:12

标签: 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);
        }       
}

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

可能导致问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

if 的确无法同时按下左箭头键和向上箭头键。该事件仅返回按下的最后一个键。即使按下向上箭头然后按向左箭头键,您实际检测到的只是左箭头键。您可以很好地按下向下和向左箭头键,并且会触发相同的 IF 条件。

检测是否同时按下多个键的一种方法是创建布尔标志以指示按下哪些所需的键,哪些不是,但您还需要使用 KeyReleased 事件,以便在释放特定键时伪造必要的标志。布尔标志应该是您的Keyboard事件的全局标志,例如:

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 条件。