Pour un exemple plus complexe, si vous avez besoin de le régler dans le contrôleur de la méthode initialize, vous avez besoin de prendre des dispositions pour le contrôleur de disposer d'une référence à la scène avant de la FXMLLoader's load() méthode est invoquée. Vous pouvez le faire en appelant setController sur le chargeur, ou en appelant setControllerFactory. Je préfère généralement le réglage du contrôleur de l'usine, car il permet l'utilisation de la fx:controller attribut dans le FXML (réglage du contrôleur directement l'interdit).
(Avec le FXML dans le même paquet à côté les fichiers Java).
Votre code fonctionne aussi bien, apparemment le #setTitle(String) n'a aucun effet si elle est appelée dans la méthode initialize d'un contrôleur ... Comment en êtes-vous une référence à la fenêtre dans la méthode initialize de la manette? J'ai étendu FXMLLoader de passer la référence de la première étape du contrôleur: pastebin.com/UuHTvBui Cela devrait fonctionner... Étrangement, ici, il n'a pas ...
Avis de La fx:controller= directive qui indique FXML la classe à utiliser comme contrôleur. Notez également Que le TextField input a un onAction directive qui indique FXML pour exécuter doStuff() comme actionHandler.
Maintenant, c'est la classe qui démarre l'application ChangeTitle.class:
Et enfin, nous avons un contrôleur pour faire le travail ChangeTitleController.class. Nous utilisons Stage primStage = (Stage) input.getScene().getWindow(); dans le doStuff() méthode pour obtenir une poignée sur la scène principale.
setTitle(...)
semble bien fonctionner ici:Mise à jour commentaires suivants.
Pour un exemple plus complexe, si vous avez besoin de le régler dans le contrôleur de la méthode initialize, vous avez besoin de prendre des dispositions pour le contrôleur de disposer d'une référence à la scène avant de la
FXMLLoader
'sload()
méthode est invoquée. Vous pouvez le faire en appelantsetController
sur le chargeur, ou en appelantsetControllerFactory
. Je préfère généralement le réglage du contrôleur de l'usine, car il permet l'utilisation de lafx:controller
attribut dans le FXML (réglage du contrôleur directement l'interdit).Donc:
PrimaryStageAware.java:
Main.java:
TitleSetter.fxml:
TitleSettingController.java:
(Avec le FXML dans le même paquet à côté les fichiers Java).
Comment en êtes-vous une référence à la fenêtre dans la méthode initialize de la manette?
J'ai étendu FXMLLoader de passer la référence de la première étape du contrôleur: pastebin.com/UuHTvBui
Cela devrait fonctionner...
Étrangement, ici, il n'a pas ...
OriginalL'auteur James_D
J'ai travaillé ce à l'aide des FXML. Ce serait mon interface simple
ChangeTitle.fxml
:Avis de La
fx:controller=
directive qui indique FXML la classe à utiliser comme contrôleur. Notez également Que le TextFieldinput
a un onAction directive qui indique FXML pour exécuterdoStuff()
comme actionHandler.Maintenant, c'est la classe qui démarre l'application
ChangeTitle.class
:Et enfin, nous avons un contrôleur pour faire le travail
ChangeTitleController.class
. Nous utilisonsStage primStage = (Stage) input.getScene().getWindow();
dans ledoStuff()
méthode pour obtenir une poignée sur la scène principale.OriginalL'auteur Resturp
Vous pouvez faire la classe Principale en tant que singleton et à communiquer avec lui par l'intermédiaire de Main.getInstance()
Par exemple:
OriginalL'auteur Алексей Вишняков