Java 8中JavaFx中的Keypressed事件问题

我最近将我的
java 7更新为
java 8.我有一个应用程序,它接受keypressed事件并检查keypressed是否是导航键并相应地采取行动.

下面是
mcve

我的控制器代码:

package sample;

import javafx.fxml.FXML;
import javafx.scene.input.KeyEvent;

public class Controller {

    @FXML
    private void keyPressed(KeyEvent evt) {
        System.out.println("Key Pressed");
    }


}

我的FXML文件:

<?xml version="1.0" encoding="UTF-8"?>

//I removed all the imports in this post... My original fxml has all the imports...  

<GridPane id="gridPaneId" alignment="CENTER" focusTraversable="true" 
gridLinesVisible="true" hgap="10.0" onKeyPressed="#keyPressed" prefHeight="400.0"
 prefWidth="300.0" vgap="10.0" xmlns:fx="http://javafx.com/fxml/1"  
xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.Controller" />

问题是如果我使用Java 7运行它,我的代码完全正常.当我尝试使用java 8运行它时,我的UI显示没有任何问题,但程序没有识别keypressed事件.可能是什么原因.

最佳答案 GridPane没有焦点.在显示舞台时尝试调用requestFocus.

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class SampleApp extends Application {
    public static void main(String[] args) {
        launch(SampleApp.class);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(FXMLLoader.load(getClass().getResource("/sample/Sample.fxml")));
        primaryStage.setScene(scene );
        primaryStage.show();
        scene.getRoot().requestFocus();
    }
}
点赞