我最近将我的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事件。可能是什么原因。
答案 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();
}
}