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.

Foi útil?

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
scroll top