我对 JavaFX 非常陌生,我正在尝试使用
KeyEvents
和 KeyCodes
。为了研究如何正确使用这些,我查看了this网页以了解如何做到这一点。
我(某种程度上)复制了它的代码以尝试将其实现到我的程序中。我主要想做的是,当用户按下 F11 时,它将进入全屏。它有效,但我不明白的是,当它被both键入并且按下时,它要么返回为无法识别的字符,要么只是显示UNDEFINED
。我觉得当我尝试使用这些方法时,我会在某个时候遇到这个问题。问题是:
为什么我的 KeyCode/KeyEvent 函数返回无效字符或“UNDEFINDED”?
结果截图onKeyTyped()
static void onKeyTyped(KeyEvent evt) {
String k = evt.getCharacter() ;
System.out.println(k + " is typed") ; // What prints when it is typed
/*
switch (k) {
case "f" -> {
isFullscreen = !isFullscreen ;
}
}
*/
}
onKeyPressed()
static void onKeyPressed(KeyEvent evt) {
KeyCode key = evt.getCode() ;
System.out.println(key + " is pressed") ;
}
onKeyReleased()
static void onKeyReleased(KeyEvent evt) {
KeyCode key = evt.getCode() ;
System.out.println(key + " is released") ;
if (key == KeyCode.F11) {
stage.setFullScreen(!isFullscreen) ;
}
}
舞台应用@Override
public void start(Stage primaryStage) {
Image icon = new Image("C:\\Users\\8018156\\IdeaProjects\\Galactify\\src\\main\\java\\com\\galactify\\tiles\\gicon.png") ;
stage = primaryStage ;
stage.setTitle("Galactify - 0.0.1") ;
stage.getIcons().add(icon) ;
stage.setScene(scene);
stage.setFullScreenExitHint("") ;
scene.setOnKeyPressed(e -> onKeyTyped(e)) ;
scene.setOnKeyTyped(e -> onKeyPressed(e)) ;
scene.setOnKeyReleased(e -> onKeyReleased(e)) ;
stage.show();
}
类属性public static Stage stage ;
static boolean isFullscreen = false ;
static FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("demo-view.fxml")) ;
static Scene scene ;
static {
try {
scene = new Scene(fxmlLoader.load(), 800, 400);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
onKeyPressed()
和
onKeyTyped()
方法。要解决此问题,只需简单地设置
start()
方法,如下所示:
@Override
public void start(Stage primaryStage) {
Image icon = new Image("C:\\Users\\8018156\\IdeaProjects\\Galactify\\src\\main\\java\\com\\galactify\\tiles\\gicon.png") ;
stage = primaryStage ;
stage.setTitle("Galactify - 0.0.1") ;
stage.getIcons().add(icon) ;
stage.setScene(scene);
stage.setFullScreenExitHint("") ;
scene.setOnKeyPressed(e -> onKeyPressed(e)) ;
scene.setOnKeyTyped(e -> onKeyTyped(e)) ;
scene.setOnKeyReleased(e -> onKeyReleased(e)) ;
stage.show();
}