# JComboBox jedes Item mit einer anderen Farbe



## delphiking1980 (6. Mai 2011)

Hallo,

ich habe eine JTable diese bekommt als DefaultTableCellRenderer eine JComboBox.
Nun zu meinem Problem wenn ich die JComboBox so erstelle : 


```
private JComboBox getSchriftFarbeCmbBox(){
		Color[] schriftFarbeList = new Color[]{Color.BLACK,Color.WHITE,Color.BLUE};
		JComboBox cb = new JComboBox(schriftFarbeList);
		cb.setRenderer(new DefaultListCellRenderer(){

			@Override
			public Component getListCellRendererComponent(JList list,
					Object value, int index, boolean isSelected,
					boolean cellHasFocus) {
				 Color color = (Color )value;

				 setText(String.valueOf(color.getRGB()));
		         setBackground(color);
		         setForeground(color);
		         this.setPreferredSize(new Dimension(10,15));
		         return this;
			}

		});
		return cb;
	}
```

dann wird mir zwar das erstellt nur leider erscheint in der Tabelle dann nicht ein Farbwert sondern der Vollqualifizierte Name der Color Klasse.

Rückgabewert soll die Farbe als String sein zbsp. "weiß" "rot" usw.
das würde ich ja mit einer IF ELSE Abfrage erledigen aber wie gebe ich einen wert zurück  an die Tabelle ?

Danke für jede hilfe.


----------



## XHelp (6. Mai 2011)

mit 
	
	
	
	





```
setText
```
 setzt du doch den Text, versuch es damit.


----------



## delphiking1980 (6. Mai 2011)

ja das stimmt nur leider steht dann in der zelle : "java.awt.color[r=0;g=0,b=0]"

haben möchte ich aber den String "schwarz"


----------



## Runtime (6. Mai 2011)

Tu alle Werte in eine Hashtable/HashMap, mit Key: Color und Value: String, dann änderst du 
	
	
	
	





```
setText(String.valueOf(color.getRGB()));[/Java] in [code=Java]setText(hashtable.get(color.getRGB()));[/Java]
```


----------



## delphiking1980 (6. Mai 2011)

das habe ich in der zwischenzei schon von selber erledigt das funzt auch nur ich bekomme jetzt immer noch den gleichen text. 

Ich denke mal das wird wohl daran liegen das ich ein Color Objekt zurück bekomme und kein Label.


```
private JComboBox getSchriftFarbeCmbBox(){
		final HashMap<Color,String> farbeMap = new HashMap<Color,String>();
		farbeMap.put(Color.BLACK,"schwarz");
		farbeMap.put(Color.WHITE,"weiss");
		farbeMap.put(Color.BLUE,"blau");

		Iterator<Entry<Color, String>> it = farbeMap.entrySet().iterator();
		ArrayList<Color> farbeArrayList = new ArrayList<Color>();
		while(it.hasNext()){
			Entry<Color, String> entry = it.next();
			farbeArrayList.add(entry.getKey());
		}

		Object[] colorArr = farbeArrayList.toArray();

		JComboBox cb = new JComboBox(colorArr);
		cb.setRenderer(new DefaultListCellRenderer(){

			@Override
			public Component getListCellRendererComponent(JList list,
					Object value, int index, boolean isSelected,
					boolean cellHasFocus) {
				 Color color = (Color )value;
				 setText(farbeMap.get(value));
		         setBackground(color);
		         setForeground(Color.RED);
		         this.setPreferredSize(new Dimension(10,15));
		         return this;
			}

		});
		return cb;
	}
```


----------



## delphiking1980 (6. Mai 2011)

```
private JComboBox getSchriftFarbeCmbBox(){
		final HashMap<String,Color> farbeMap = new HashMap<String,Color>();
		farbeMap.put("schwarz",Color.BLACK);
		farbeMap.put("weiss",Color.WHITE);
		farbeMap.put("blau",Color.BLUE);

		Iterator<Entry<String, Color>> it = farbeMap.entrySet().iterator();
		ArrayList<String> farbeArrayList = new ArrayList<String>();
		while(it.hasNext()){
			Entry<String, Color> entry = it.next();
			farbeArrayList.add(entry.getKey());
		}

		Object[] colorArr = farbeArrayList.toArray();

		JComboBox cb = new JComboBox(colorArr);
		cb.setRenderer(new DefaultListCellRenderer(){

			@Override
			public Component getListCellRendererComponent(JList list,
					Object value, int index, boolean isSelected,
					boolean cellHasFocus) {
				 Color color = farbeMap.get(value);
				 setText(String.valueOf(value));
		         setBackground(color);
		         setForeground(Color.RED);
		         this.setPreferredSize(new Dimension(10,15));
		         return this;
			}

		});
		return cb;
	}
```


----------



## Runtime (6. Mai 2011)

Noch ein Lesbarkeitstipp: ersetze setForeground(Color.RED) mit setForeground(new Color(~color.getRGB()))


----------



## delphiking1980 (7. Mai 2011)

Nur was ist mit dunkel grau ?

das ist wohl ein Bug.


----------



## Runtime (7. Mai 2011)

Was soll mit mit dunkelgrau sein?


----------



## Marco13 (7. Mai 2011)

Dungelgrau wird durch ~ zu dunkelgrau, das kann man dann nicht sooo gut lesen


----------



## delphiking1980 (8. Mai 2011)

Danke für die Unterstützung. 

Da das Thema (für mich) erledigt ist möchte ich diesen Thread nun schließen.


----------

