【问题标题】:Java-check if control key is being pressedJava-检查是否正在按下控制键
【发布时间】:2012-07-24 11:29:53
【问题描述】:

我有一个 Java 函数,我想在其中测试控制键是否被按住。我该怎么做?

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

【问题讨论】:

  • 您需要提供更多信息。这在基于 GUI 的程序中是否有必要,即在 Windows 或控制台应用程序中? This 可能有用,this。

标签: java swing


【解决方案1】:

使用“isControlDown()”布尔值:

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

【讨论】:

  • 你忘了分号。
  • 坦克。已更正。
【解决方案2】:

上面的代码只有在唯一按下的是控制键时才有效。如果他们有 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 的开关。

【讨论】:

    【解决方案3】:

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

    boolean controlStatus=false;
    

    然后在jTextField上的keyPressed事件中:

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

    在 keyReleased 事件中:

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

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

    【讨论】:

    • 是的,这与我上面的内容相同。但是现在让我们做一些面向对象的思考:你不想让全局标志像这样飞来飞去。去看看匿名内部类,找出如何反转你的程序,这样你就不需要那个标志了。
    【解决方案4】:

    这取决于几件事。

    如果您将 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多