web-dev-qa-db-fra.com

Comment faire référence à la primetage

J'utilise des fichiers .FXML pour la couche de vue de mon application. Chaque FXML a un contrôleur attaché à celui-ci

<AnchorPane fx:controller="movielistjavafx.view.MainWindowController">

Supposons que j'ai un ordinateur central et son contrôleur. Le mainframe.fxml est chargé dans la méthode start(Stage)-.

Maintenant, vous souhaitez montrer un filechooser qui est attaché à une étape/fenêtre/peu importe.

Pour cela, il serait bon de laisser le contrôleur FXML savoir sur le par exempleprimaryStage.

Y a-t-il un moyen de l'injecter au contrôleur ou la FXML sait-elle au moment de l'exécution à quelle scène et quelle étape appartient-elle?

Seule une idée que j'ai consiste à stocker des conditions principales dans un contexte statique, mais cela ne semble pas être un moyen de le faire pour moi.

18
Gundon

Solution robuste (peut être utilisée comme un extrait): prenez un événement puis obtenir le contrôle qui a tiré cet événement. Utilisez ce contrôle pour obtenir la scène:

@FXML
private void browseDirectory(ActionEvent event) {
    Stage stage = Stage.class.cast(Control.class.cast(event.getSource()).getScene().getWindow());
    DirectoryChooser directoryChooser = new DirectoryChooser();
    File selectedDirectory = directoryChooser.showDialog(stage);
    System.out.println(selectedDirectory.getAbsolutePath());
}
7
zoran