2017-11-25 1 views
0
MenuItem opt1 = new MenuItem("Opt1"); 
MenuItem opt2= new MenuItem("Opt2"); 
MenuButton menu = new MenuButton("Menu"); 
menu.getItems.(opt1,opt2); 

VBox mmm= new VBox(); 
mmm.getChildren.add(menu); 


MenuItem subOpt1= new MenuItem("SubOpt1"); 
MenuItem subOpt2= new MenuItem("SubOpt2"); 
MenuButton sbuMenu = new MenuButton("subMenu"); 
menu.getItems.(SubOpt1,SubOpt2); 

MenuItem subOpt001= new MenuItem("SubOpt001"); 
MenuItem subOpt002= new MenuItem("SubOpt002"); 
MenuButton subMenu00 = new MenuButton("subMenu00"); 
menu.getItems.(SubOpt001,SubOpt002); 

opt1.setOnAction(e->{ 

    if(e.getSource==opt1) 
     mmm.getChildren.add(subMenu); 


}) 


opt1.setOnAction(e->{ 

    if(e.getSource==opt2) 
     mmm.getChildren.add(subMenu00); 


}) 

Dann habe ich die App laufen und zeigt nur das Menü der MenuItem, und nichts anderes auftaucht. Eine andere Methode, die ich verwende, ist, dass eine globale Variable MenuButton sub deklariert wird und der Wert sich ändert, wenn sich die Aktion auf MenuItem opt1 und opt2 ändert. Dann mit einer vbox zu .addAll(menu,sub), und Fehler zeigt java.lang.reflect.InvocationTargetException.JavaFX: Wie anders MenuItems in einem MenuButton erhalten, wenn die Option Änderungen in einem anderen MenuButton

Wie anders MenuItems in einem MenuButton, wenn die Option Änderungen in einem anderen MenuButton

+0

Wahrscheinlich verursacht durch Ändern eines Menüs, das angezeigt wird. Möglicherweise können Sie einen Workaround durchführen, indem Sie nur die Elemente aktivieren, auf die Sie Zugriff haben sollten. Außerdem wäre es besser, diesen Status des Menüs mit 'CheckMenuItem' /' RadioMenuItem' darzustellen. Übrigens: Da Sie den 'onAction'-Handler von 'opt1' durch einen Handler ersetzen, der prüft, ob die Quelle 'opt2' ist, sollten Sie keine Effekte wie die beschriebenen sehen. – fabian

+0

Vielleicht kann ein 'menuButton' von einem anderen mit' .setVisible() 'abgedeckt werden, aber es scheint, dass es keine Möglichkeit gibt, einen Button mit einem anderen zu bedecken? Oder gibt es einen bestimmten Bereich, der dies möglich macht? Nachdem ich diese Lösungen gefunden hatte, versuchte ich es und scheiterte. Der gleiche Grund von dem, was @fabian sagte, ich ändere den angezeigten Bereich. 'Image.setVisible()' funktioniert jedoch, nachdem der Bereich angezeigt wurde. Warum und wie kann ich das reparieren ???? Außerdem verwende ich 'VBox', um diese menuButtons zu enthalten, und das' .setLayOutX/Y' funktioniert nicht, das 'menuButton' kann nicht abgedeckt werden. Irgendein Rat?? –

+0

Es ist so, als wären Sie in der Station und wählen Sie den Startplatz und das Ende. Zuerst geben Sie die Linien, die sie haben, und dann basierend auf der Linie, die Sie gewählt haben, können Sie nur die Position auf dieser Linie sehen. Wie kann das funktionieren ??? –

Antwort

0

Set jeden MenuButton an der gleichen Stelle zu bekommen, und wenn die MenuItem des ersten MenuButton ausgewählt ist, ändern Sie die Sichtbarkeit (.setVisble()) der anderen MenuButtons du willst verstecken und erscheinen, es funktioniert. Deatils sind im Kommentar.

Verwandte Themen