2017-04-07 2 views
0

J'ai 6 fichiers fxml ayant un contrôleur. J'ai besoin d'initialiser la méthode pas sur le premier fxml mais sur le 5ème fichier fxml (PasswordArray.fxml) pour la personnalisation des boutons. Comme la méthode initialize() est appelée automatiquement lors du chargement du premier fichier fxml (Home.fxml), une erreur apparaît. Comment utiliser maintenant initialize method après PasswordArray.fxml. J'ai cherché sur internet mais je n'ai trouvé aucune solution à ma question. Dois-je utiliser des contrôleurs différents, car j'ai besoin de la méthode initialize pour plus d'un fichier fxml. Main FXML File (Home.fxml)Appel de la méthode initialize() en externe dans le contrôleur fxml plutôt que automatiquement

Controller (MajorProjectController.java) [méthode initialize()] [3]

+1

* "J'ai 6 fichiers fxml avec un contrôleur" *. Premièrement: vous n'avez pas. Vous obtenez un nouveau contrôleur chaque fois que vous chargez un fichier FXML. Ce que vous voulez probablement dire est * "J'ai 6 fichiers fxml, et les contrôleurs pour tous sont de la même classe" *. Juste ** ne le faites pas **. Créez une classe de contrôleur différente pour chaque FXML. –

+0

Merci #James_D pour votre suggestion. Mais j'ai une requête "Je n'ai pas besoin d'autres opérations personnalisées pour tous les fichiers fxml mais seulement certains des fichiers ont besoin de la méthode initialize pour faire des opérations supplémentaires sur l'interface graphique. les fichiers qui ont besoin de la méthode initialize pour effectuer une personnalisation? " –

+0

Vous ne devriez utiliser ** ** jamais la même classe de contrôleur pour différents fichiers FXML. La seule exception possible à cela (à laquelle je peux penser) serait si vous aviez deux fichiers FXML qui avaient * exactement * le même ensemble de commandes, mais les disposiez différemment (par exemple si vous écriviez à la fois sur desktop et mobile et avait des dispositions différentes: mais il est peu probable que vous puissiez faire ce travail pour une variété de raisons de toute façon). –

Répondre

0

Vous pouvez vérifier le nom du fichier dans le paramètre emplacement de l'URL de la méthode d'initialisation et de déclencher vos actions en conséquence. Notez que FXMLLoader créera une instance distincte de la classe de contrôleur pour chaque FXML individuel - à moins que vous ne fournissiez manuellement la votre à l'instance de FXMLLoader.

+0

Mais j'utilise la méthode initialize() sans paramètre. Parce que quand je l'utilise avec des paramètres, je ne suis pas capable de l'appeler à partir de différentes méthodes annotées @FXML. Qu'est-ce que je devrais faire maintenant ? –

+0

@MohitaSrivastava Si vous appelez 'initialize()' à partir d'autres méthodes du contrôleur, vous faites fondamentalement quelque chose de mal. La méthode 'initialize()' est pour l'initialisation, c'est-à-dire qu'elle ne doit être appelée qu'une seule fois par instance de contrôleur. –

+1

De même, pour utiliser la méthode 'initialize' sans argument, vous pouvez toujours ajouter un champ nommé' location', le rendre visible par 'FXMLLoader' et' FXMLLoader' va injecter l'URL de localisation dans ce champ. Notez que je considérerais mal l'emplacement de la méthode 'initialize' car l'URL ne sera pas évidente et un fichier fxml pourrait être renommé en cassant le code ... – fabian