Comment accéder à un JavaFx Scène à partir d'un Contrôleur?
Je suis de la conversion d'un pur JavaFx application, dans lequel le code ci-dessous a bien fonctionné lors de la mettre tous dans une classe, à un FXML, où la Scène de la déclaration et du gestionnaire de bouton sont dans des classes séparées. Dans le Contrôleur, je suis en train de mettre en œuvre une méthode qui permet à l'utilisateur de choisir un répertoire et de le stocker dans une variable pour l'utiliser plus tard:
private File sourceFile;
DirectoryChooser sourceDirectoryChooser;
@FXML
private void handleSourceBrowse() {
sourceDirectoryChooser.setTitle("Choose the source folder");
sourceFile = sourceDirectoryChooser.showDialog(theStage);
}
Cependant, "theStage", une Étape qui, la méthode exige, n'existe(si c'est la bonne terminologie) dans FolderSyncer4.java:
public class FolderSyncer4 extends Application {
final String FOLDER_SYNCER = "FolderSyncer";
Stage theStage;
@Override
public void start(Stage primaryStage) throws Exception {
theStage = primaryStage;
//TODO do the FXML stuff, hope this works
Parent root = FXMLLoader.load(getClass().getResource("FolderSyncerMainWindow.fxml"));
theStage.setScene(new Scene(root, 685, 550));
theStage.setTitle(FOLDER_SYNCER);
theStage.show();
}
}
Comment puis-je contourner ce problème? J'ai besoin d'avoir cette méthode de mise en œuvre de nouveau en quelque sorte, mais du coup je ne peux pas passer le stade comme un argument.
handleSourceBrowse()
dans votre .fxml
avec un onAction
attribut sur votre Button
élément, comme ... onAction="#handleSourceBrowse" ...
, droit?Yep, il est là. Il m'a incité à ajouter @FXML annotation à l'handleSourceBrowse() la méthode, j'ai donc fait(mise à jour de la question en conséquence), mais le problème persiste.
Double Possible de Comment puis-je ouvrir le JavaFX FileChooser à partir d'un contrôleur de classe?
OriginalL'auteur Sargon1 | 2015-11-26
Vous devez vous connecter pour publier un commentaire.
Dans votre situation, il est probablement plus facile à obtenir de la scène de la
ActionEvent
paramètre de votre gestionnaire de:Voir JavaFX: Comment obtenir de l'étape de contrôleur au cours de l'initialisation? pour plus d'information. Je ne suis pas en faveur de la plus haute cote de réponse, mais, depuis, il ajoute une compilation de la dépendance du temps pour le contrôleur, après la
.fxml
fichier a été chargé (après tout, que la question a été marqué avecjavafx-2
, donc pas sûr que si l'approche ci-dessus déjà travaillé là-bas, et aussi le contexte de la question est un peu différent).Voir aussi Comment puis-je ouvrir le JavaFX FileChooser à partir d'un contrôleur de classe?
C'est étrange, je l'ai testé avec un exemple simple, voir github.com/afester/CodeSamples/tree/master/Java/JavaFXSample/.... Pouvez-vous coller la trace de la pile de l'exception à pastebin.com ou quelque chose de similaire et ajouter le lien dans un commentaire?
Elle est ici. Merci pour l'aide, je ne suis pas trop bon à déchiffrer ces choses. pastebin.com/3AycwLge
Ok, donc la cause est une
NullPointerException
en ligne 75 de votre contrôleur de classe - qu'est-ce que le contenu de cette ligne?Yup, juste pensé à elle aussi. Il semble s de travailler maintenant, merci.
OriginalL'auteur Andreas Fester
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