# JMenu und JMenuItem: MouseOver-Farbe ändern



## zerko (26. Okt 2004)

Morgen..

Beim überfahren eines MenuItem wird der Hintergrund hellblau (standart).
Ich habe versucht diese Funktion abzufangen, indem ein Mouselistener
*mouseEntered* die Hintergrundfarbe ändert.

Leider komme ich nicht an das JMenuItem...

```
public void mouseEntered ( MouseEvent MEvent ) {
    TYP meinVar = MEvent.getSource().toString();
    if ( meinVar = "Neu" ){
        System.out.println( "Menupunkt: Neu" );
    }
}
```

Vielleicht hat jemand eine bessere Lösung oder weiß wie ich den Text des JMenuItem über das MouseEvent abfragen kann??


Gruß
zerko


----------



## Sky (26. Okt 2004)

Was Du machst ist eine Zuweisung:

```
if ( meinVar = "Neu" ){ 
        System.out.println( "Menupunkt: Neu" ); 
    } 
}
```

Und nun so geht ein Vergleich:

```
if ( "Neu".equals( meinVar ) ){ 
        System.out.println( "Menupunkt: Neu" ); 
    } 
}
```

Außerdem denke ich, dass man mit 
	
	
	
	





```
MEvent.getSource().toString();
```
 nicht an den Inhalt des MenuItems kommt.

Wenn Du 'nur' die Hintergrundfarbe der Selektion ändern willst, so guck Dir doch mal die Methode setUI an. Ich denke, dass man damit die Farben ganz gut ändern kann.

Wenn die Farben Applikationsweit geändert werden sollten, so guck Dir mal den UIManager an.


----------



## zerko (26. Okt 2004)

hab mich nur vertippt 

setUI... werde ich mal ausprobieren..
Danke


----------



## CelikBlek (26. Okt 2004)

Hi,
versuche es mal hiermit:


```
...
((JButton)e.getSource()).setBackground(Color.red);
...
```

Gruss


----------



## Guest (26. Okt 2004)

Danke für den Tip des CAST's 

Meine Lösung...

```
public void mouseEntered ( MouseEvent MEvent ) { 
    String strItem = ( (JMenuItem) MEvent.getSource() ).getText();

    if ( strItem.equals("Neu") ){ 
        System.out.println( "Menupunkt: Neu" ); 
    } 
}
```

Es klappt jetzt wunderbar :]

Gruß
zerko


----------



## Roar (26. Okt 2004)

so kopmliziert ist das doch alles gar nicht :-(
du musst nur ein paar values in den UIDefaults ändern, das geht mit UIManager.setColor(Object key, Object value)
key ist dann etwas in der art "MenuItem.mouseOverForeground" (das ist jetz falsch, muste mal selber nachschauen in den UIDefaults, irgendwas mit MenuItem am anfang)
und value is dann halt dine farbe.
die listener geschichte is viel zu umständich


----------



## zerko (26. Okt 2004)

In diesem Fall hast du recht..
Man kann "meine Idee" auch garnet so einfach anwenden, weil beim mouseEntered die DefaultUI-Einstellungen noch aktiv sind und ich dort nicht den Hintergrund ohne weitere "repaint();" Anweisungen ändern kann.

Werde mal den Gedanken des UIManager weiter verfolgen, habe jedoch noch nie damit "gespielt" :]...
Bin für jeden Tip, Lösung oder was auch immer dankbar...


Gruß
zerko


----------



## Roar (26. Okt 2004)

ok, so soltlest du das gewünschte ergebnis hinkriegen:;

```
UIManager.setColor("MenuItem.selectionBackground", Color.BLACK);
UIManager.setColor("MenuItem.selectionForeground", Color.WHITE);
```

wenn du noch mehr farben außer den MenuItems ändern willst und du nur das standart Metal LookAndFeel benutzt wär ex whrscheinlich einfacherer du schreibst gleich ein eigenes Theme (siehe SwingSet um zu gucken)


----------



## zerko (27. Okt 2004)

Mir würde reichen zu Anfang die UI eines JMenuItem oder JButton zu verändern bzw. selbstdefinieren..
Ich habe mir einige Themes runtergeladen, jedoch beinhalten diese fast jede JComponent...

Hast su vielleicht einen Puntk, an dem ich ansetzen kann??
Oder ein Link zu einem Tutorial...

Gruß
zerko


----------



## Roar (27. Okt 2004)

ja, die Themes beziehen sich halt auf jede Komponente :-/
wenn du nur MenuItems und Buttons ändern willst dann sollte der weg über die UIDefaults völlig ausreichen.


----------

