Je suis nouveau sur JavaFx et je crée une application qui nécessitait quelque chose de similaire à JDialog qui était proposé lors de l'utilisation de composants swing. J'ai résolu cela en créant une nouvelle scène, mais maintenant j'ai besoin d'un moyen de fermer la nouvelle scène de l'intérieur en cliquant sur un bouton. (oui, le bouton x fonctionne aussi, mais il le voulait aussi sur le bouton). Pour décrire la situation: J'ai une classe principale à partir de laquelle je crée la scène principale avec une scène. J'utilise FXML pour ça.JavaFX2: Fermeture d'une scène (sous-étape) depuis l'intérieur
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Builder.fxml"));
stage.setTitle("Ring of Power - Builder");
stage.setScene(new Scene(root));
stage.setMinHeight(600.0);
stage.setMinWidth(800.0);
stage.setHeight(600);
stage.setWidth(800);
stage.centerOnScreen();
stage.show();
}
Maintenant dans la fenêtre principale que je semble que tous les éléments de commande et des menus et des choses, faites par FXML et la classe de contrôle approprié. C'est la partie où j'ai décidé d'inclure les infos sur le menu Aide. J'ai donc un événement se passe lorsque le menu Aide - A propos est activé, comme ceci: Comme on le voit la fenêtre À propos de boîte est créée via FXML avec classe de contrôle à nouveau
@FXML
private void menuHelpAbout(ActionEvent event) throws IOException{
Parent root2 = FXMLLoader.load(getClass().getResource("AboutBox.fxml"));
Stage aboutBox=new Stage();
aboutBox.setScene(new Scene(root2));
aboutBox.centerOnScreen();
aboutBox.setTitle("About Box");
aboutBox.setResizable(false);
aboutBox.initModality(Modality.APPLICATION_MODAL);
aboutBox.show();
}
. Il y a une image, une zone de texte et un bouton, et je veux que ce bouton ferme la nouvelle scène qui est la aboutBox de la classe AboutBox.java pour ainsi dire.
La seule façon dont je me suis trouvé capable de faire cela, était de définir un static static Stage aboutBox ; à l'intérieur de la classe Builder.java et référence à celle-ci à partir de la méthode AboutBox.java qui gère l'événement d'action sur le bouton de fermeture. Mais d'une manière ou d'une autre, il ne se sent pas exactement propre et correct. Y a-t-il une meilleure façon?
Merci d'avance pour vos conseils.
Fermer la scène comme ceci contourne le gestionnaire d'événement onCloseRequest (s'il y en a un). J'ajouterais la ligne stage.getOnCloseRequest(). Handle (null); juste avant stage.close(); – beardedlinuxgeek
Merci @beardedlinuxgeek. J'ai eu ce problème - ma fenêtre fermait mais le gestionnaire d'événement que j'avais enregistré n'était pas appelé. Votre solution a résolu le problème. –