我有一个 Java 函数,我想在其中测试控制键是否被按住。我怎样才能做到这一点?
编辑:我正在使用swing for gui。
使用“isControlDown()”布尔值:
public void keyPressed (KeyEvent e)
{
System.out.println(e.isControlDown());
}
上面的代码只有在唯一按下的是控制键时才有效。如果他们有 ctrl 并且(可能)意外按下了其他按钮,它将不会捕获。
您可以仅检查 ctrl 键
// Are just the CTRL switches left on
if(evt.getModifiers() == InputEvent.CTRL_MASK) {
System.out.println("just the control key is pressed");
}
当模拟多个按键被按下时,您使用 or 位操作符。要模拟同时按住左键和 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 的开关。
这取决于几件事。
如果您将 Java 程序作为控制台程序(基于文本)运行,则必须测试接收到的字符中的适当位。
否则,您应该查看合适的 GUI 类的 InputEvents,例如http://docs.oracle.com/javase/6/docs/api/java/awt/event/InputEvent.html。
看看这个教程:http ://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html
我找到了一个解决我的问题的解决方案:我声明了一个全局变量
boolean controlStatus=false;
然后在 jTextField 上的 keyPressed 事件中:
if(evt.getKeyCode()==KeyEvent.VK_CONTROL)
controlStatus=true;
在 keyReleased 事件中:
if(evt.getKeyCode()==KeyEvent.VK_CONTROL)
controlStatus=false;
然后我可以访问全局变量来检查控制键是否被按住。