我正在使用简单的库存系统制作视频游戏。我试图做到这一点,以便每当您按下“ 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");
}
});
当我尝试按该键时,它什么也没做。
答案 0 :(得分:3)
在KEY_TYPED事件中,您从事件中提取 code 并将其从处理程序中返回,然后将其与KeyCode.Z
进行比较。
对于键按下和键释放事件,code变量包含事件的键代码。对于键类型的事件,代码变量始终包含KeyCode.UNDEFINED。
因此,您正在将KeyCode.UNDEFINED
与KeyCode.Z
比较不匹配。
如果发生键键入事件,则必须使用KeyEvent.getCharacter()
并将其与"Z"