Java检查是否按下了控制键

时间:2012-07-25 22:46:40

标签: java swing

我有一个Java函数,我想测试控制键是否被按下。我怎么能这样做?

编辑:我正在为gui使用swing。

4 个答案:

答案 0 :(得分:9)

使用" isControlDown()"布尔:

public void keyPressed (KeyEvent e)
{
     System.out.println(e.isControlDown());
}

答案 1 :(得分:4)

上面的代码只有在按下的唯一内容是控制键时才有效。如果他们有ctrl和其他按钮(可能)意外按下,它将无法捕获。

您可以完全检查ctrl键

// Are just the CTRL switches left on
if(evt.getModifiers() == InputEvent.CTRL_MASK) {
    System.out.println("just the control key is pressed);
}

当模拟按下多个键时,使用或位运算符。要模拟按住左键和ctrl键,请查找此内容。

// Turn on all leftButton and CTRL switches
int desiredKey = InputEvent.BUTTON1_MASK | InputEvent.CTRL_MASK;  

当检查ctrl键是否关闭时,你可以这样做

// If we turn off all switches not belonging to CTRL, are all the CTRL switches left on
if((evt.getModifiers() & InputEvent.CTRL_MASK) == InputEvent.CTRL_MASK) {
    System.out.println("Control Key is pressed and perhaps other keys as well");
}

您还可以检查是否按下了左按钮和ctrl蒙版

// If we turn off all switches not belonging to leftButton or CTRL, are all the leftButton and CTRL switches left on
if((evt.getModifiers() & desiredKey) == desiredKey) {
    System.out.println("left button and control keys are pressed and perhaps others as well");
}

假设你有这个:

A | B

你应该这样想。 A有一个控制面板,上面有一堆开关。 B还有一个控制面板,上面有一堆开关。 “| B”的工作是做必要的最小工作,以确保所有B的开关都打开。

假设你有这个:

A & B

“& B”的工作是完成关闭任何不是B的开关所需的最少工作。

答案 2 :(得分:2)

这取决于几件事。

如果您将Java程序作为控制台程序(基于文本)运行,则必须在接收到的聊天室中测试approriate位。

否则,您应该查看InputEvents以获取相应的GUI类,例如http://docs.oracle.com/javase/6/docs/api/java/awt/event/InputEvent.html

查看本教程:http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

答案 3 :(得分:2)

我找到了一个解决我问题的解决方案: 我声明了一个全局变量

boolean controlStatus=false;

然后在jTextField上的keyPressed事件:

if(evt.getKeyCode()==KeyEvent.VK_CONTROL)
      controlStatus=true;

如果是keyReleased:

if(evt.getKeyCode()==KeyEvent.VK_CONTROL)
      controlStatus=false;

然后我可以访问全局变量来检查控制键是否被按下。