2017-10-11 1 views
1

Ich habe ein Menü, das als JMenuItem beginnt. Wenn es ausgewählt ist, möchte ich, dass sein Aktionslistener diesen Menüeintrag durch ein Menü mit Untermenüs ersetzt.So ersetzen Sie JMenuItem durch JMenu (ohne Neuordnung)

Ich versuchte mit parentMenu.remove(subMenuItem); parentMenu.add(subMenu);, aber das bewegt das Menü an den unteren Rand seiner Eltern Menüpunkte. Ich möchte, dass es dort bleibt, wo es in den Eltern-Menüpunkten steht.

Muss ich das übergeordnete Menü neu erstellen?

(ich kann schreiben/eine SSCCE bieten, wenn Sie denken wirklich, dass es notwendig ist.)

Antwort

1

Verwenden Sie die

Container.add(component, index); 

Methode das Menü eingefügt werden, wo immer Sie wollen.

Natürlich müssen Sie den entsprechenden Index finden, indem Sie eine andere Container Methode verwenden, um alle Komponenten im Container zu durchlaufen.

+0

Vielen Dank! Ich habe gerade das Add (Menü, Index) gefunden und habe mich gefragt, wie man den Index bekommt ... Such-Stack-Überlauf Ich habe .getComponentZOrder gefunden, aber das gibt -1 zurück (nicht gefunden?). Am Ende habe ich über die übergeordneten Menü-Komponenten getippt und sie ersetzt, wenn sie gefunden wurden ... Ich werde so schnell wie möglich eine Antwort schreiben. – geowar

0

Ich fand (und Camickr vorgeschlagen) Ich verwende .add(subMenu, index); Das führt zu der Frage "Wie finde ich meinen Index in meinem Elternmenü?". Suchen Stack-Überlauf für das fand ich .getComponentZOrder(), aber das ist immer -1 zurückgegeben (nicht gefunden?). So landete ich mit diesem hinauf:

for (int i = 0; i < parentMenu.getMenuComponentCount(); i++) { 
     if (parentMenu.getMenuComponent(i) == subMenuItem) { 
      checkMenu.remove(subMenuItem); 
      checkMenu.add(subMenu, i); 
      break; 
     } 
    } 

Edit: Ich habe auch die .getComponentZOrder() Art und Weise herausgefunden:

Container container = subMenuItem.getParent(); 
if (container != null) { 
    int index = container.getComponentZOrder(subMenuItem); 
    if (index > -1) { 
     checkMenu.remove(subMenuItem); 
     checkMenu.add(subMenu, index); 
    } 
} 

(Es ist eine weitere Zeile Code und ich vermute, .getComponentZOrder ziemlich viel tut die gleiche Arbeit, so werde ich wahrscheinlich nur mit der Iteration des Untermenüs (Artikel) selbst gehen.)

Verwandte Themen