【问题标题】:KeyEvent doesn't understand ENTER keyKeyEvent 不理解 ENTER 键
【发布时间】:2017-03-07 20:48:41
【问题描述】:

我正在使用 java 创建一个记事本。似乎有一个小问题。Java 没有得到与 ENTER 键有关的条件的代码行。它理解 ctrl 和 Alt。但不输入。只是跳过那部分!我该怎么办?`

if( !e.isControlDown() && !e.isAltDown() && e.getKeyCode() != KeyEvent.VK_ENTER)
        {
            frame.wholeText.linesList.get(frame.cursor.j).chars.add(frame.cursor.i,c);
            frame.cursor.i += 1 ;
            System.out.println("Entered");
            charMetric = frame.getFontMetrics( frame.getFont() ).charWidth(c) ;
            frame.cursor.setX( frame.cursor.getX() + charMetric );

        }`

PS:当我按 ENTER 时它不应该进入这个条件,但它会。 PS2:在代码的KeyTyped部分。

【问题讨论】:

  • 那么您正在检查的是关键代码没有输入。将您的 if 状态更改为:if( !e.isControlDown() && !e.isAltDown() && e.getKeyCode().equals(KeyEvent.VK_ENTER))
  • 是的,但是当我按 Enter 时它会进入这种情况,而它不应该
  • 也许可以试试equals 运算符而不是!=
  • @SamOrozco,常量是intgetKeyCode() 返回一个int,所以没关系。
  • 什么是“e”变量类?按键事件?

标签: java keyboard keyevent


【解决方案1】:

documentation for KeyEvent.getKeyCode() 很清楚:

返回:键盘上实际按键的整数代码。 (对于 KEY_TYPED 事件,keyCode 为 VK_UNDEFINED。)

相反,KeyEvent.getKeyChar() 说:

KEY_PRESSED 和 KEY_RELEASED 事件不用于报告字符输入。因此,保证此方法返回的值仅对 KEY_TYPED 事件有意义。

KEY_PRESSED 和 KEY_RELEASED 事件生成带有有效 keyCode 但没有 keyChar 的 KeyEvent。 KEY_TYPED 事件则相反:它们生成具有有效 keyChar 的 KeyEvent,但 keyCode 始终未定义。

您正在检查 KEY_TYPED 事件的 getKeyCode() 值,因此 keyCode 将始终未定义。

使用e.getKeyChar() != '\n' 或在keyPressed 方法中执行您的keyCode 检查。

【讨论】:

    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多