Pour résoudre ton problème, déjà il y a une erreur dans ton fichier FXML, tu as fermé la balise </items> après </Menu> qui correspond au Menu tous, il faut d'abord rectifier ton fichier fxml pour que soit comme ça:
1 2 3 4 5 6 7 8 9 10
| <Menu fx:id="TestMenu" mnemonicParsing="false" text="Test">
<items>
<Menu mnemonicParsing="false" text="Tous">
<items>
<MenuItem mnemonicParsing="false" text="One" />
<MenuItem mnemonicParsing="false" text="Two" />
</items>
</Menu>
</items>
</Menu> |
En deuxième lieu avec ton code tu va accéder bien sûr au Menu "Tous" car c'est que tu sélectionnes, n'oublies pas que la profondeur de l’arborescence du menu c'est en 3 niveaux, et ici mais tu n'a pas sélectionné le premier sous menu one, alors pour se faire juste une petite astuce avant de faire le getItems().get(0).setDisable(true) il faut faire du casting pour retourner un Menu avec lequel tu peux accéder à ses menus-items, comme ça :
1 2
|
((Menu)testMenuBar.getMenus().get(0).getItems().get(0)).getItems().get(0).setDisable(true); |
Mais de la même manière que tu as pu récupérer l'id de la barre de menu la méthode lookup(..) alors tu pourrait ajouter un id autre que le fx:id, ce qu'on appel le css id, et tu peux récupérée le menu comme tu veux. il faut juste faire comme ça :
1 2 3 4 5 6 7 8 9 10
| <Menu fx:id="TestMenu" mnemonicParsing="false" text="Test">
<items>
<Menu mnemonicParsing="false" text="Tous">
<items>
<MenuItem mnemonicParsing="false" id="one" text="One" />
<MenuItem mnemonicParsing="false" id="two" text="Two" />
</items>
</Menu>
</items>
</Menu> |
Et récupérer comme ça:
((MenuItem) Main.SceneRoot.lookup("#one")).setDisable(true);
Partager