J'ai un FXML qui décrit mon IUG. Je veux changer le texte de l'interface graphique et démarrer une tâche sur n'importe quelle touche n'importe où.Ajout écouteur d'événement à l'aide mainScene à JavaFX FXML
FXML
<Text fx:id="barcodeText"/>
Contrôleur
@FXML
Text barcodeText;
public void start(Stage primaryStage) throws IOException {
this.primaryStage=primaryStage;
Scene mainScene =new Scene(root);
primaryStage.setScene(mainScene);
primaryStage.setResizable(false);
primaryStage.show();
Parent root = FXMLLoader.load(getClass().getResource("/view/foo.fxml"));
mainScene.addEventHandler(KeyEvent.KEY_PRESSED,new KeyboardEventHandler(){
@Override
public void handle(KeyEvent event) {
barcodeText.setText("foo");
}
});
Cela me donne un NullPointerException
(à l'intérieur JavaFX fil Application) pour le pointeur barcodeText quand je déclenche l'événement.
Est-ce que je fais quelque chose de mal?
Les exemples que je avons examinés en utilisant cette approche sans FXML, dois-je utiliser une annotation pour définir le gestionnaire? où est-ce que je mettrais "onAction" pour la scène dans le fxml?
'@FXML Texte textBox,' 'ou @FXML Texte barcodeText;'? – pzaenger
Le chargeur de FXML '@ champs initialise de FXML' annoté dans le * contrôleur *, pas dans l'instance de la classe' 'Application' sur laquelle start' est appelé. Donc, 'barcodeText' (ou' textBox', ou tout ce que vous avez vraiment appeliez) sera nulle dans le 'Application' exemple. –
@pzaenger désolé, qui était une faute de frappe –