Java 8中JavaFx中的Keypressed事件问题

时间:2014-06-03 22:24:43

标签: java javafx java-8

我最近将我的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事件。可能是什么原因。

1 个答案:

答案 0 :(得分:2)

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();
    }
}