# JComboBox Hintergrundfarbe des gewählten Items



## MasterChristian (18. Apr 2012)

Hallo,

ich habe eine JComboBox bei dem manche Items eine andere Hintergrundfarbe haben. Realisiert über einen Renderer. (In diese Beispiel ist nur das erste Item Rot):


```
public class itemRenderer extends DefaultListCellRenderer {

	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
		
		Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
					
		if(index == 0) {
			c.setBackground(Color.RED);
			c.setForeground(Color.WHITE);
		}
		else {
			c.setForeground(Color.BLACK);
			c.setBackground(null);
		}
		
		if(isSelected && c.getBackground() != Color.RED) {
			c.setBackground(Color.LIGHT_GRAY);
			c.setForeground(Color.WHITE);
		}
		
		
		return c;
	}
}
```

Nun wird das erste Item zwar in der aufgeklappten Liste Rot angezeigt, das jeweils gewählte hat aber immer die gleiche Farbe. Wenn ich z.B. über einen Listener comboBox.setBackground(Color.RED) setzte, wenn das erste Item ausgewählt wurde, so wird nur der Pfeil, sowie die Auswahlliste komplett Rot, das Textfeld aber nicht.

MfG MasterChristian


----------



## VfL_Freak (18. Apr 2012)

Moin,

hmm, so ganz bin ich Durch Deine Fehlerbeschreibung nicht durchgestiegen (was für ein Pfeil???:L) ...

Hast Du es mal so versucht?

```
if( c.isSelected && (c.getBackground() != Color.RED) )
```

Gruß
Klaus


----------



## SlaterB (18. Apr 2012)

wenn die ComboBox nicht gerade selektiert wird (baue z.B. minimal nicht einen Button ein und klicke auf den),
dann reicht das
> comboBox.setBackground(Color.RED) 
bei mir


für die Selektion anscheinend z.B.
UIManager.put("ComboBox.selectionBackground", ..);
(vor allen GUI-Zusammenbau)
how to set the background selection color of a Combobox (Swing / AWT / SWT / JFace forum at JavaRanch)


such mal im Internet nach 'jcombobox background' usw., da kommen verschiedene Links, 
manche verwenden auch reichlich unschön

```
((JTextField) cb.getEditor().getEditorComponent()).setDisabledTextColor(Color.green);
        ((JTextField) cb.getEditor().getEditorComponent()).setBackground(Color.green);
```
was wohl bei einer editierbaren ComboBox wichtig wird,

leider sind solche Einstellungen irgendwie alle zusammengesammelte Hacks, 
ein richtig komplett durchdesigntes vollständig modulierbares Framework, 
ob mit UIManager.put() oder setXYColor(), ist Swing wohl leider nicht


----------



## MasterChristian (19. Apr 2012)

Hallo,

@VfL_Freak eine JComboBox hat doch nen kleinen Schwarzen pfeil zum Aufklappen der Liste, der wurde bei mir Rot hinerlegt wenn ich nur comboBox.setBackground(Color.RED) aufrufe.

Allerdings habe ich mittlerweile eine Lösung gefunden die bei mir gut Funktioniert. Ich verbinde die comboBox mit einem ActionListener und führe dann bei einem Event folgendes aus:


```
if (comboBox.getSelectedIndex() == 0) {
		Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
		BasicComboPopup popup = (BasicComboPopup) child;
		JList list = popup.getList();
		list.setSelectionBackground(Color.RED);
}
else {
		Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
		BasicComboPopup popup = (BasicComboPopup) child;
		JList list = popup.getList();
		list.setSelectionBackground(null); //Oder Standartselektierfarbe je nach Bedarf
}
```

Dann wird die Selektierfarbe auch Rot wenn ich das Item mit dem Roten Background (In meinem Beispiel Item 0) selektiere.

MfG MasterChristian


----------

