插入符 (^) 不会立即注册。 Java 关键听众

Caret (^) does not register immediately. Java key listener

我目前正在 Java 构建计算器并已开始实施 一个关键的倾听者。它工作得很好,但是当我尝试键入插入符号 (^) 时,它不会立即注册。您必须先按另一个键才能显示它。

我想这是因为它使用了与您尝试键入插入符号时相同的行为 在常规文本文档中。但是有什么办法可以解决这个问题吗?

如果有帮助,这是我处理 KeyEvents 的代码:

@Override
public void handle(KeyEvent ke) {
    String key = ke.getCharacter();

    if (key.matches("[0-9*/+-=.()^%]")) {
        controller.getButton(key).fire();
    }
}

编辑:找到解决方法。 Eli Sadoff 提到的问题是我的插入符是键盘上的死键。由于我对插入符的绑定是“shift+¨”,所以我可以这样解决它:

@Override
public void handle(KeyEvent ke) {
    String key = ke.getCharacter();

    if (ke.isShiftDown() && ke.getCode() == KeyCode.DEAD_DIAERESIS) {
        controller.getButton("^").fire();
    }

    else if (key.matches("[0-9*/+-=.()%]")) {
        controller.getButton(key).fire();
    }
}

问题是您在计算机上使用的输入键盘布局将 ^ 视为死键,因为它是组合变音符号。解决此问题的方法是将您的输入键盘布局更改为不将 ^ 视为组合变音符号的键盘。这可以通过键入 ^ + e 并查看它是否导致 ê^e.[=12 来测试=]