# JComboBox Selected-Background Farbe



## muDge (20. Jul 2008)

Hi,

ist euch eine Möglichkeit bekannt, wie man für eine ComboBox die Hintergrundfarbe des selektierten Eintrages ändern kann? Mit einem ListCellRenderer lässt sich meines Wissens ja nur die Vorder- und allgemeine Hintergrundfarbe modifizieren... müsste man ansonsten zwangsweise das L&F bearbeiten oder gibt es eine andere Lösung?


----------



## kleiner_held (21. Jul 2008)

Mit dem ListCellRenderer lagst du schon richtig. Der nimmt die Hintergrundfarbe von der JList, die die ComboBoxUI intern erstellt. Eine einfache Loesung waere es die vom L&F definierte Selektierungsfarbe an der JList durch eine eigene zu ersetzen. Das macht man am besten gleich im Renderer:


```
comboBox.setRenderer(new DefaultListCellRenderer()
		{
			@Override
			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
					boolean cellHasFocus)
			{
				if (list.getSelectionBackground() instanceof ColorUIResource)
				{
					list.setSelectionBackground(Color.RED);
				}
				return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
			}
		});
```


----------



## Verjigorm (21. Jul 2008)

Oh, sehr schön.
Genau sowas hab ich grad letzte Woche gesucht!
Ich hätte das aber gerne für ALLE Comboboxen.
Geht das, ohne an jede Box explitzit den Renderer zu hängen?


----------



## kleiner_held (21. Jul 2008)

Wenn es fuer alle Comboboxen gelten soll, wuerde ich die entsprechende L&F Constante aendern.

```
UIManager.getDefaults().put("ComboBox.selectionBackground", new ColorUIResource(Color.RED));
```


----------



## Verjigorm (21. Jul 2008)

Ok vielen Dank, man muss ja auch erstmal wissen wie das geht


----------



## muDge (23. Jul 2008)

danke für die Antwort!
Vielleicht kann man die Frage gleich noch etwas ausweiten: Wüsste noch jemand, wie man den "zweiten" Border der ComboBoxen entfernen bzw. farblich verändern kann? Zumindestens im Metal-Theme existiert dieser und hat nichts mit dem JComboBox.setBorder() zutun...


----------

