# JMenu unterschiedliche Background einstellen



## jan_pb (7. Mrz 2009)

Hallo,
bin schon seit einige Stunden auf der Suche nach meinem Problem:

ich will ein Menü mit Submenüs erstellen, wo ich die einträge je nach tiefe des menüs unterschiedliche Hintergrundfarbe beim Mouseover erstellen kann.

Bsp: die einträge der erste ebene sollen beim mouseover dunkelblau hinterlegt werden, die einträge der zweite ebene sollen beim mouseover hellblau hinterlegt werden, die fonts sollen auch entsprechend kleiner sein in den submenüs.

mit 
[HIGHLIGHT="Java"]UIManager.put ("Menu.selectionBackground", Color.BLUE)[/HIGHLIGHT]

und 
[HIGHLIGHT="Java"]UIManager.put ("MenuItem.selectionBackground", Color.RED)[/HIGHLIGHT]


kann ich nur eine einheitefarbe für alle menu / menuitems erzeugen.

Danke im voraus.


----------



## hdi (7. Mrz 2009)

Ohne das jetzt überprüft zu haben:
Es gibt doch setBackground() bzw. setSelectionBackground() oder so
für JMenus und JMenuItems.
Da kannst du doch dann beim Erstellen vom Menu die jeweilige Farbe setzen,
ich nehme an du weisst ja welches Menu wohin kommt.

Für die Schriftart gibt es wohl auch setFont(), ist aber wieder nur geraten 

Kuck doch einfach selber bei den enstprechenden Klassen nach:

Java Platform SE 6


----------



## jan_pb (7. Mrz 2009)

die setBackground() setForeGround() funktionen von JComponent sind für meine zwecke nicht brauchbar, da diese nicht stati abhängig sind. In der abstractbutton klasse, von der JMenuitem und JMenu abgeleitet sind gibt es zwar die funktionen setRolloverIcon() setSelectedIcon() usw, aber diese sind nur für den Icon vor dem text zuständig, also damit kann man nicht den normalen hintergrund eines menüeintrages ändern.


----------



## hdi (7. Mrz 2009)

Was meinst du mit nicht statisch abhängig?
Die Farbe sowie die Schriftart kannst du für jeden Menu-Eintrag einzeln bearbeiten,
mit setBackground() bzw setFont().

Nur die Mouse-Over Farbe kannst du nicht ohne weiteres für jeden Eintrag einzeln
bearbeiten. Dafür musst du dir dann halt nen Listener schreiben.


----------



## diggaa1984 (8. Mrz 2009)

er meinte schon stati im sinne von Status .. nicht statisch 

also mit den methoden setForeGround() setBackGround etc. kann er seine Status-behafteten Anzeigen nicht umsetzen


----------



## jan_pb (8. Mrz 2009)

diggaa1984 hat gesagt.:


> er meinte schon stati im sinne von Status .. nicht statisch
> 
> also mit den methoden setForeGround() setBackGround etc. kann er seine Status-behafteten Anzeigen nicht umsetzen



genau das meinte ich.

Das mit listener und für jedes element selbst die farben zu ändern je nach status, wäre auch die einzige lösung die mir bislang einfällt. Was ist suche ist halt sowas wie eine erweiterung für den UIManager, wo man auf einem schlag alle komponenten vom selben typ + status hat.

stell mir sowas vor:
[HIGHLIGHT="Java"]
UIManager.put("Menu.background", color.red);
UIManager.put("Menu.selectionbackground", color.blue);
UIManager.put("SubMenuLevel1.background", color.blue);
UIManager.put("SubMenuLevel1.selectionbackground", color.green);
UIManager.put("SubMenuLevel2.background", color.green);
UIManager.put("SubMenuLevel2.selectionbackground", color.white);

und dann die klassen

class SubmenuLevel1 extends JMenuItem { ... }
class SubMenuLevel2 extends JMenuItem { ... }

[/HIGHLIGHT]


----------

