Problema com Keypressed evento em JavaFx em Java 8
Pergunta
Recentemente eu atualizei meu java 7 para o java 8.Eu tenho um aplicativo que leva o keypressed de eventos e verifique se o keypressed é uma tecla de navegação e agir em conformidade.Abaixo está uma mcve
O meu controlador de código:
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");
}
}
Meu FXML arquivo:
<?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" />
O problema é que o meu código completamente funciona bem se eu executá-lo usando o Java 7.Quando tento executá-lo usando o java 8, minha INTERFACE do usuário mostra-se sem quaisquer problemas, mas o programa não está a reconhecer o keypressed evento.O que poderia ser a razão.
Solução
O GridPane não tem o foco.Tentar chamar requestFocus
quando a fase é mostrado.
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();
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow