JMenubar

Status
Nicht offen für weitere Antworten.

brausemause

Mitglied
Hallo!

ich versuche seit einiger Zeit eine dynamische Menuleiste zumachen.
Dass bedeutet, wenn ich ein Event kommt, dann soll diese Menuleiste einen JMenu eintrag entfernen und einen anderen hinzufügen.
Erstmal: geht das überhaupt?

Ich habe das ganze so gemacht, dass ich mir immer eine neue JMenubar erstelle, die alte lösche und dann die neue hinzufüge.

vereinfacht sieht das ganze so aus:


Code:
//die Methode gibt eine Menuleiste zurück
menuBar = baueMenuLeiste(true);
anzeige.setJMenuBar(menuBar  );

Nun das switchen der Menuleiste:

Code:
anzeige.remove(menuBar);
menuBar = baueMenuLeiste(false);
anzeige.setJMenuBar(menuBar  );


Da ich nicht sooo der GUI spezialist bin, habe ich auch schon sehr viele andere Sachen probiert, also mit setVisible der einzelnen Einträge und so weiter.

Vielen Dank für Eure Hilfe.

Brausemause
 
Eigentlich müsste es auch gehen einfach teile auf disabled zu setzen.... das sollte dir viel Arbeit ersparen oder wie hat du dir das gedacht?
 
Danke für Deine Antwort.

Das disablen macht das ganze grau - und es ist ja irgendwie noch da! Ich würde aber gerne eine Art Menuleisten Switch machen von


Datei Generalisiert Hilfe

zu

Datei Einfach Hilfe


Geht das ohne großen Aufwand?



Viele sonnige Grüße

brausemause
 
Die MenuItem's der MenuBar als Klassenvariablen speichern und dann deren Bezeichnung dynamisch ändern.
 
Das ändert dann aber nix in den Menüs ^^.


Also der container von JMenuBar hat eine Methode remove(int Index) und damit kannste dir ein Item an der stelle rauswerfen und dann insert oder add mit dem Index das neue direkt dort einfügen.

Das sollte theoretisch klappen!
 
Hej,
mmh, das hat aber nicht geklappt - habe ich ja oben schon probiert.

Muss man dann irgendwas aufrufen, dass das aktualisiert wird? Bein enable muss man das ja nicht.
Ich kann leider nicht meinen ganzen Code online stellen, weil das echt viel und mehrere Klassen sind, aber vielleicht hilft das:


Code:
//Im Konstruktor:
//Menueleiste bauen
		menuBarGeneralized = false;
		menuBar = baueMenuLeiste(false);
		anzeige.setJMenuBar(menuBar  );

//Methode von außen zugänglich:


public boolean aendereMenuLeiste(boolean gen){
		if(menuBarGeneralized!=gen){
			anzeige.remove(menuBar);
			anzeige.setJMenuBar(baueMenuLeiste(gen));
			return true;
		}
		else 
			return false;
		
	}

//Die Menuleistenbaumethode - stark gekürzt:

private	JMenuBar baueMenuLeiste(boolean gen) {

MenuBarListener menuListener = new MenuBarListener(model, this);
//		Menueleiste bauen
		JMenuBar menuBar = new JMenuBar(); 

	//Allgemein
		if(gen){
			JMenu genMenu = new JMenu("Generalized"); 
			menuItem = new JMenuItem("Longest Common Substring...");
			menuItem.setActionCommand("lcs");
		    menuItem.addActionListener(menuListener);
			genMenu.add( menuItem);
			
			menuBar.add(genMenu ); 
		}
	
		//Simple
		else{
		 JMenu anMenu = new JMenu("Simple"); 
		
		menuItem = new JMenuItem("Pattern Searching...");
		menuItem.setActionCommand("ps");
	    menuItem.addActionListener(menuListener);
		anMenu.add(menuItem );
		
		
		menuBar.add(anMenu ); 
		}
return menuBar;
}

danke euch!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben