Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab?

Diskutiere JMenu aufgeklappt oder nicht - Wie frage ich das ab? im AWT, Swing, JavaFX & SWT Bereich.
H

Hein_nieH

Hallo,
ich möchte in meinem Menue die Menuefarbe highlighten, wenn ich mit der Maus im JMenuebar über den jeweiligen JMenue Eintrag gehe.
(Ich schreibe bewusst nicht JMenue Item, um eine Verwechslung mit JMenuItem auszuschließen).
Hierzu habe ich jedem JMenue-Eintrag einen MouseListener verpasst und die Methoden mouseEntered und mouseExited überschrieben.
Das ganze funktioniert auch wie geplant, solange die JMenu-Einträge nicht aufgeklappt sind.
Wenn die JMenue-Einträge ausgeklappt sind, also die zugehörigen Submenus bzw. JMenuItems sichtbar sind, dann kann ich nicht mit der gewünschten Farbe highlighten.

Hierzu meine Fragen:
Mit welcher Methode kann ich abfragen, ob ein JMenue ausgeklappt (expandiert) ist?
Muss ich da die JMenuBar befragen? Ich habe die JMenue- und JMenuebar-Objekte durchforstet aber keine schlüssige Methode gefunden.
Meiner Meinung nach müsste es so etwas wie eine isExpanded-Methode geben?

Mein zweites verbundenes Problem:
Ich möchte die JMenuItems ebenfalls highlighten wenn ich mit der Maus über das Item gehe.
Hierzu habe ich jedem JMenueItem einen MouseListener verpasst und die Methoden mouseEntered und mouseExited überschrieben.
Leider funktioniert das nicht, da hier wohl noch ein weiteres (mir unbekanntes) Event mitspielt, dass die MousListener-Methoden überlagert.
Hat jemand da eine Musterlösung? ich möchte das ohne UIManager hinbekommen.

Ich würde mich freuen, wenn mir jemand einen Tipp geben kann.

Gruss Hein_nieH
 
mihe7

mihe7

JMenu#isSelected() und JMenuItem#isArmed() - ich wage allerdings zu bezweifeln, dass Du das vernünftig hinbekommst, ohne über das LaF zu gehen.
 
H

Hein_nieH

Hallo Mihe 7,

danke für die Antwort.
Für Testzwecke habe ich jetzt doch den UIManager bemüht.
Alle Settings für die JMenu-Elemente (also "Menu.xxxx") funktionieren via UIManager.

Die Settings für die JMenuItem-Elemente (also "Menuitem.xxxx") funktionieren via UIManager nicht.
Habe ich da einen Denkfehler?
Ich nutze noch Java 7.

Gruss Hein_nieH


Java:
  UIManager.put("Menu.selectionBackground", Color.yellow); //funktioniert
  UIManager.put("Menu.selectionForeground", Color.blue);//funktioniert
  // JMenue unselected
  UIManager.put("Menu.background", Color.white);
  UIManager.put("Menu.foreground", Color.black);
 
  //JMenue selected
  UIManager.put("MenuItem.selectionBackground", Color.yellow); //funktioniert nicht
  UIManager.put("MenuItem.selectionForeground", Color.blue); //funktioniert nicht//funktioniert nicht
  UIManager.put("MenuItem.background", Color.white);//funktioniert nicht
  UIManager.put("MenuItem.foreground", Color.red);//funktioniert nicht
 
H

Hein_nieH

Fehler gefunden ?
Für die JMenuItems habe ich den Konstruktor ( JMenuItem jmi = new JmenueItem() ) vor dem Aufruf des UIManagers aufgerufen.
Die Instanziierung der JMenuItems muss nach dem Aufruf des UIManagers erfolgen.

.. man kern nie aus ;)

Trotzdem noch eine Frage:
wie kann ich diesen UI-Managerbefehl UIManager.put("Menu.selectionBackground", Color.blue);
auf ein einzelnes JItem-Objekt anwenden? z.B. objJitem.setSelectionBackground() gibt es ja nicht.
es gibt nur objJitem.setBackground() :rolleyes:

Gruss Hein_nieH
 
Thema: 

JMenu aufgeklappt oder nicht - Wie frage ich das ab?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben