为什么我的 KeyCode/KeyEvent 函数返回无效字符或“UNDEFINDED”? (JavaFX)

问题描述 投票:0回答:1

我对 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); } }
    
java javafx keyboard keyevent
1个回答
0
投票
结果很奇怪,因为你不小心切换了

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(); }
    
© www.soinside.com 2019 - 2024. All rights reserved.