JavaFX Classe contrôleur de Scène/de la Fenêtre de référence Est-il possible de l'obtenir de la Scène/objet de la Fenêtre d'un FXML fichier chargé à partir de la classe associée contrôleur? En particulier, j'ai un contrôleur pour une fenêtre modale et j'ai besoin de la Scène pour le fermer. OriginalL'auteur nailujed | 2012-10-22 javajavafxjavafx-2 7 Je ne pouvais pas trouver une solution élégante à ce problème. Mais j'ai trouvé ces deux alternatives: L'obtention de la fenêtre de référence à partir d'un Nœud dans la Scène @FXML private Button closeButton ; public void handleCloseButton() { Scene scene = closeButton.getScene(); if (scene != null) { Window window = scene.getWindow(); if (window != null) { window.hide(); } } } Passage de la Fenêtre comme un argument pour le contrôleur lorsque le FXML est chargé. String resource = "/modalWindow.fxml"; URL location = getClass().getResource(resource); FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setLocation(location); fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); Parent root = (Parent) fxmlLoader.load(); controller = (FormController) fxmlLoader.getController(); dialogStage = new Stage(); controller.setStage(dialogStage); ... Et FormController doit mettre en œuvre les setStage méthode. OriginalL'auteur nailujed 0 @FXML private Button closeBtn; Stage currentStage = (Stage)closeBtn.getScene().getWindow(); currentStage.close(); Une autre façon est de définir une statique de lecture de la Scène et de l'Accès il Classe Principale public class Main extends Application { private static Stage primaryStage; //**Declare static Stage** private void setPrimaryStage(Stage stage) { Main.primaryStage = stage; } static public Stage getPrimaryStage() { return Main.primaryStage; } @Override public void start(Stage primaryStage) throws Exception{ setPrimaryStage(primaryStage); //**Set the Stage** Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show(); } } Vous Pouvez maintenant accéder à ce stade, en appelant Principal.getPrimaryStage() En Classe De Contrôleur public class Controller { public void onMouseClickAction(ActionEvent e) { Stage s = Main.getPrimaryStage(); s.close(); } } OriginalL'auteur Jinu P C Vous devez vous connecter pour publier un commentaire.
Je ne pouvais pas trouver une solution élégante à ce problème. Mais j'ai trouvé ces deux alternatives:
L'obtention de la fenêtre de référence à partir d'un Nœud dans la Scène
Passage de la Fenêtre comme un argument pour le contrôleur lorsque le FXML est chargé.
Et FormController doit mettre en œuvre les setStage méthode.
OriginalL'auteur nailujed
Une autre façon est de définir une statique de lecture de la Scène et de l'Accès il
Vous Pouvez maintenant accéder à ce stade, en appelant
En Classe De Contrôleur
OriginalL'auteur Jinu P C