0

我正在使用简单的库存系统制作视频游戏。我正在尝试这样做,以便每当您按下“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");
        }
    });

当我尝试按下该键时,它完全没有任何作用。

4

1 回答 1

3

在 KEY_TYPED 事件中,您从事件中提取代码并从处理程序中返回,然后将其与KeyCode.Z.

KeyEvent的API Doc状态:

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

所以你正在比较KeyCode.UNDEFINED哪个KeyCode.Z不匹配。

您将不得不KeyEvent.getCharacter()在关键类型事件的情况下使用并将其与"Z"

于 2019-06-09T14:51:16.017 回答