Java 击键捕捉。ctrl使KeyChar属性为空

Java 击键捕捉。ctrl使KeyChar属性为空,java,Java,我有一段代码,允许我捕获击键并使用System.out.println打印它们。我的问题是,当我尝试将它与ctrl(例如ctrl+m)一起使用时,它会删除m键的KeyChar属性。有人知道为什么会发生这种情况,以及我如何解决它吗 public TestForm() { initComponents(); KeyEventDispatcher keyEventDispatcher = new KeyEventDispatcher() { @Override p

我有一段代码,允许我捕获击键并使用System.out.println打印它们。我的问题是,当我尝试将它与ctrl(例如ctrl+m)一起使用时,它会删除m键的KeyChar属性。有人知道为什么会发生这种情况,以及我如何解决它吗

       public TestForm() {
        initComponents();
KeyEventDispatcher keyEventDispatcher = new KeyEventDispatcher() {
  @Override
  public boolean dispatchKeyEvent(final KeyEvent e) 
  {
    if (e.getID() == KeyEvent.KEY_PRESSED && e.isAltDown())
        {
         System.out.println("ALT + "+e.getKeyChar());   
        }
    else if (e.getID() == KeyEvent.KEY_PRESSED && e.isShiftDown())
        {
            System.out.println("SHIFT + "+e.getKeyChar());
        }
    else if (e.getID() == KeyEvent.KEY_PRESSED && e.isControlDown())
        {
             System.out.println("CTRL + "+e.getKeyChar()/*+"\n"+e*/);
        }   
    else
    {
        System.out.println(e);
    }
            return      true;   
        }
  };


KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keyEventDispatcher)

;        
}

我对java还很陌生,所以我可能缺少一些简单的东西。提前感谢

键代码和键字符之间有一个重要的区别。键代码表示键盘上的键。键字符表示某些字母表中的一个字母。键盘上有一个ctrl键,但任何字母表中都没有用于ctrl的字母(例如,没有unicode字符)。因此,当按下ctrl键时,您会得到一个按键代码为但没有按键字符的按键按下事件

但并非所有的希望都破灭了。看起来您正在尝试检测何时按下CTRL和某个字符(例如,如果键入CTRL+A而不是A)。问题是您正在查看按键事件。在Java中,按键事件和按键类型事件之间有一个重要的区别

对于exmaple,如果我要在键盘上按Ctrl+A,我会先按Ctrl键,然后按A键,然后同时或多或少地释放它们。在我看来,这是一种行为,但事实并非如此。Java中的情况是:

KEY_PRESSED (keyCode = VK_CTRL, keyChar = CHAR_UNDEFINED) //I press down Ctrl key
KEY_PRESSED (keyCode = VK_A, keyChar = CHAR_UNDEFINED) //I press down the a key
KEY_TYPED (keyCode = VK_UNDEFINED, keyChar = 'A') //The 'typing' of the letter 'A'
//some key released events that are not relevant to this discussion
如您所见,按键按下事件有一个按键代码,但没有按键字符(当按下键盘上的某个键时,会触发此事件)。一个KEY类型的事件有一个KEY char,但没有KEY code(这表示一个KEY序列的完成,结果是一个字母)


所有这些都详细记录在页面的javadocs中。

键代码和键字符之间有一个重要的区别。键代码表示键盘上的键。键字符表示某些字母表中的一个字母。键盘上有一个ctrl键,但任何字母表中都没有用于ctrl的字母(例如,没有unicode字符)。因此,当按下ctrl键时,您会得到一个按键代码为但没有按键字符的按键按下事件

但并非所有的希望都破灭了。看起来您正在尝试检测何时按下CTRL和某个字符(例如,如果键入CTRL+A而不是A)。问题是您正在查看按键事件。在Java中,按键事件和按键类型事件之间有一个重要的区别

对于exmaple,如果我要在键盘上按Ctrl+A,我会先按Ctrl键,然后按A键,然后同时或多或少地释放它们。在我看来,这是一种行为,但事实并非如此。Java中的情况是:

KEY_PRESSED (keyCode = VK_CTRL, keyChar = CHAR_UNDEFINED) //I press down Ctrl key
KEY_PRESSED (keyCode = VK_A, keyChar = CHAR_UNDEFINED) //I press down the a key
KEY_TYPED (keyCode = VK_UNDEFINED, keyChar = 'A') //The 'typing' of the letter 'A'
//some key released events that are not relevant to this discussion
如您所见,按键按下事件有一个按键代码,但没有按键字符(当按下键盘上的某个键时,会触发此事件)。一个KEY类型的事件有一个KEY char,但没有KEY code(这表示一个KEY序列的完成,结果是一个字母)


所有这些都详细记录在页面的javadocs中。

键代码和键字符之间有一个重要的区别。键代码表示键盘上的键。键字符表示某些字母表中的一个字母。键盘上有一个ctrl键,但任何字母表中都没有用于ctrl的字母(例如,没有unicode字符)。因此,当按下ctrl键时,您会得到一个按键代码为但没有按键字符的按键按下事件

但并非所有的希望都破灭了。看起来您正在尝试检测何时按下CTRL和某个字符(例如,如果键入CTRL+A而不是A)。问题是您正在查看按键事件。在Java中,按键事件和按键类型事件之间有一个重要的区别

对于exmaple,如果我要在键盘上按Ctrl+A,我会先按Ctrl键,然后按A键,然后同时或多或少地释放它们。在我看来,这是一种行为,但事实并非如此。Java中的情况是:

KEY_PRESSED (keyCode = VK_CTRL, keyChar = CHAR_UNDEFINED) //I press down Ctrl key
KEY_PRESSED (keyCode = VK_A, keyChar = CHAR_UNDEFINED) //I press down the a key
KEY_TYPED (keyCode = VK_UNDEFINED, keyChar = 'A') //The 'typing' of the letter 'A'
//some key released events that are not relevant to this discussion
如您所见,按键按下事件有一个按键代码,但没有按键字符(当按下键盘上的某个键时,会触发此事件)。一个KEY类型的事件有一个KEY char,但没有KEY code(这表示一个KEY序列的完成,结果是一个字母)


所有这些都详细记录在页面的javadocs中。

键代码和键字符之间有一个重要的区别。键代码表示键盘上的键。键字符表示某些字母表中的一个字母。键盘上有一个ctrl键,但任何字母表中都没有用于ctrl的字母(例如,没有unicode字符)。因此,当按下ctrl键时,您会得到一个按键代码为但没有按键字符的按键按下事件

但并非所有的希望都破灭了。看起来您正在尝试检测何时按下CTRL和某个字符(例如,如果键入CTRL+A而不是A)。问题是您正在查看按键事件。在Java中,按键事件和按键类型事件之间有一个重要的区别

对于exmaple,如果我要在键盘上按Ctrl+A,我会先按Ctrl键,然后按A键,然后同时或多或少地释放它们。在我看来,这是一种行为,但事实并非如此。Java中的情况是:

KEY_PRESSED (keyCode = VK_CTRL, keyChar = CHAR_UNDEFINED) //I press down Ctrl key
KEY_PRESSED (keyCode = VK_A, keyChar = CHAR_UNDEFINED) //I press down the a key
KEY_TYPED (keyCode = VK_UNDEFINED, keyChar = 'A') //The 'typing' of the letter 'A'
//some key released events that are not relevant to this discussion
如您所见,按键按下事件有一个按键代码,但没有按键字符(当按下键盘上的某个键时,会触发此事件)。一个KEY类型的事件有一个KEY char,但没有KEY code(这表示一个KEY序列的完成,结果是一个字母)

所有这些都详细记录在页面的javadocs中