JavaFX inclure fxml dans le fxml sans contrôleur
Je suis à la programmation d'une application avec javafx.
C'est un "multi-écran" application avec un mainmenu de où je peux passer ma scène.
Mes scènes sont définies dans différentes fxml fichiers.
Parce que j'essaie d'utiliser le modèle mvc je n'ai pas de régler le contrôleur dans le fxml fichiers, j'utilise setController sur le FXMLloader.
Tout fonctionne bien mais j'ai le mainmenu et l'ensemble de ses fonctions pour le onActions dans le contrôleur séparé et distinct fichier fxml.
Je l'ai essayé avec
<fx:include source="Menubar.fxml"/>
et créé un contrôleur pour le fichier fxml, lorsque j'ai mis le contrôleur dans le fichier fxml je ne peux pas compiler la source. Comment dois-je configurer le contrôleur pour les fichier fxml?
startpage.fxml obtient son contrôleur "Startpage" avec
FXMLLoader loader = new FXMLLoader(getClass().getResource("../fxml/startpage.fxml"));
loader.setController(new Startpage(m));
Pane mainPane = loader.load();
startpage.fxml
comprend menubar.fxml
, comment définir un contrôleur pour la barre de menu contrôle maintenant? Ou comment inclure le menubarController facilement dans tous les autres contrôleurs?
OriginalL'auteur Garog | 2015-03-25
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devez utiliser une
controllerFactory
dans le chargeur pour obtenir ce que vous voulez ici. Lorsque vous utilisez uncontrollerFactory
, vous spécifiez le nom de la classe du contrôleur dans le FXML fichiers, mais le contrôleur de l'usine permet de contrôler l'utilisation qui est mappé à un objet (vous pouvez toujours construire en le passant dans un modèle, etc). Lorsque vous spécifiez uncontrollerFactory
pour unFXMLLoader
, que l'usine est également utilisé pour créer les contrôleurs pour les<fx:include>
s que vous avez dans le fichier FXML.Enfin, notez que vous pouvez injecter le contrôleur pour les fxml fichier dans le "principal" fichier fxml, comme indiqué dans le "Imbriqués les contrôleurs de la" section de la documentation FXML.
Donc si startpage.fxml ressemble à ceci:
et la barre de menus.fxml ressemble
Alors vous pouvez contrôler l'instanciation de classes de contrôleur:
Maintenant que vous avez effectivement des références à deux contrôleurs dans le code de votre application, si vous avez besoin, mais vous pouvez aussi le faire
De sorte que le contrôleur principal a maintenant une référence à la barre de menu de la manette.
Je ne peux pas vraiment vous aider si je sais que les parties que vous ne comprenez pas. Chaque fichier fxml a qu'un seul contrôleur de exemple sont associés. Le fichier fxml pouvez spécifier un de la classe pour le contrôleur. Ainsi, le contrôleur de l'usine est juste une fonction qui raconte l'
FXMLLoader
comment faire pour obtenir l'instance du contrôleur de la classe spécifiée. La duplication des méthodes, ou d'en faire un contrôleur d'une sous-classe de l'autre, n'aidera pas parce que vous avez encore deux différentes instances du contrôleur (pour ne pas faire référence aux mêmes données).Le plus gros problème pour moi est de comprendre votre solution (juste un java débutant) et/ou adapter votre exemple de mon code. Je vais essayer d'expliquer un peu plus pourquoi j'ai besoin de tout cela. Tout d'abord, comme j'ai commencé le projet, chaque fichier fxml avait son propre contrôleur, qui était très bien, j'ai pu inclure tous les fxml dans uns aux autres sans perdre toutes les fonctions. par exemple, j'ai eu une page dans l'application "createproject" cette page contient des objets textfield et inclus la barre de menu. lorsque j'ai utilisé la menuitems pour changer de page (scène) pour "settingsforcreateproject" j'ai compris la barre de menu dans la nouvelle fxml de nouveau.
prendre e regardez ici gist.github.com/Garog/ee979f4c50c76c554f86 tout était beau et le plus agréable de travailler avec swing ou awt, mais là, j'avais besoin de données en scène de la scène b, comme les réglages dans les paramètres de la scène dans le projectcreate scène. j'ai créé un modèle dans ma classe principale et puis.. les problèmes ont commencé, comment partager le modèle entre le contrôleur. j'ai regardé autour et a trouvé des solutions que le son est de bonne qualité, il est question de définir le contrôleur de stackoverflow.com/a/14190310/3710098 mais cette solution ne fonctionne pas avec fxml inclure fxml.. et ici je suis maintenant..
Eh bien, sûrement ma solution est exactement ce que fait le partage de la un modèle entre la "main" du contrôleur et le contrôleur du inclus fxml. Quelles parties du code ne comprenez-vous pas?
OriginalL'auteur James_D