JavaFX KEY_TYPED事件无所作为

时间:2019-06-09 14:39:39

标签: java javafx keyboard keyboard-events keyboard-input

我正在使用简单的库存系统制作视频游戏。我试图做到这一点,以便每当您按下“ Z”键时,它就会显示或隐藏库存GUI。我不知道为什么,但是KEY_TYPED键事件不起作用。 KEY_PRESSED和KEY_RELEASED键事件运行正常。

这是我的关键事件处理程序类:

public static KeyCode handle(javafx.scene.input.KeyEvent e) {
    if (e.getEventType() == javafx.scene.input.KeyEvent.KEY_PRESSED) {
        e.consume();
        return e.getCode();
    }

    if (e.getEventType() == javafx.scene.input.KeyEvent.KEY_RELEASED) {
        e.consume();
        return e.getCode();
    }

    if (e.getEventType() == javafx.scene.input.KeyEvent.KEY_TYPED) {
        e.consume();
        return e.getCode();
    }

    return null;
}

这是我使用关键事件的地方:

    primaryStage.getScene().setOnKeyTyped(event -> {
        KeyCode e = KeyEvent.handle(event);

        if (e == KeyCode.Z) {
            System.out.println("test");
        }
    });

当我尝试按该键时,它什么也没做。

1 个答案:

答案 0 :(得分:3)

在KEY_TYPED事件中,您从事件中提取 code 并将其从处理程序中返回,然后将其与KeyCode.Z进行比较。

API Doc for KeyEvent指出:

  

对于键按下和键释放事件,code变量包含事件的键代码。对于键类型的事件,代码变量始终包含KeyCode.UNDEFINED。

因此,您正在将KeyCode.UNDEFINEDKeyCode.Z比较不匹配。

如果发生键键入事件,则必须使用KeyEvent.getCharacter()并将其与"Z"

进行比较。