# Farbige JCombobox



## deathbyaclown (7. Okt 2003)

Hallo,

ich würde gerne eine JComboBox haben mit Farben zur Auswahl. D.h. man sieht in bei der Auswahl eine Art farbiges Rechteck (keinen Text)....

Habe schon mit Renderern rumgespielt aber ohne Erfolg.

Kann mir jemand sagen wie das geht, oder wo da dazu was steht ?????

THX !!!


----------



## jptc.org (7. Okt 2003)

So dann wollen wir das Ganze mal versuchen  :wink: 


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class Test extends JApplet {
	public void init() {
		Container contentPane = getContentPane();
		JComboBox combo = new JComboBox(new Object[] {
			new Object[] { Color.gray, "gray" },
			new Object[] { Color.orange, "orange" },
			new Object[] { Color.red, "red" },
			new Object[] { Color.blue, "blue" },
			new Object[] { Color.yellow, "yellow" },
			new Object[] { Color.magenta, "magenta" },
			new Object[] { Color.black, "black" },
			new Object[] { Color.green, "green" },
			new Object[] { Color.lightGray, "lightGray"} });

		combo.setRenderer(new ColorRenderer());

		contentPane.setLayout(new FlowLayout());
		contentPane.add(combo);
	}
}
class ColorRenderer extends JLabel implements ListCellRenderer {
	private static ColorIcon icon = new ColorIcon();

	private Border 
		redBorder = BorderFactory.createLineBorder(Color.red,2),
		emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2);

	public Component getListCellRendererComponent(
									JList list,
									Object value,
									int index,
									boolean isSelected,
									boolean cellHasFocus) {
		Object[] array = (Object[])value;

		icon.setColor((Color)array[0]);
		setIcon(icon);
		setText((String)array[1]);

		if(isSelected) setBorder(redBorder);
		else 		   setBorder(emptyBorder);

		return this;
	}
}
class ColorIcon implements Icon {
	private Color color;
	private int w, h;

	public ColorIcon() {
		this(Color.gray, 50, 15);
	}
	public ColorIcon(Color color, int w, int h) {
		this.color = color;
		this.w = w;
		this.h = h;
	}
	public void paintIcon(Component c, Graphics g, int x, int y) {
		g.setColor(Color.black);
		g.drawRect(x, y, w-1, h-1);
		g.setColor(color);
		g.fillRect(x+1, y+1, w-2, h-2);
	}
	public Color getColor() {
		return color;
	}
	public void setColor(Color color) {
		this.color = color;
	}
	public int getIconWidth() {
		return w;
	}
	public int getIconHeight() {
		return h;
	}
}
```

Inklusive einem kleinem Applet, ich hoffe mal das funzt!

Karsten Voigt
http://www.java-performance-portal.org


----------



## mariopetr (7. Okt 2003)

bissel sehr umstaendlich, von defaultcellrenderer ableiten und das label mit opaque und color zurueckzugeben reicht (fuer den urspruenglich geforderten fall)


----------



## jptc.org (7. Okt 2003)

OK, ich sehe ein das war etwas viel Code. Jedoch habe ich ein vollständiges und schnell erweiterbares Beispiel bevorzugt. Natürlich kann man das Ganze auch vereinfachen. Man sollte aber beachten, dass man möglichst leicht erweiterbar bleibt.

Karsten Voigt
http://www.java-performance-portal.org


----------



## Werz (7. Okt 2003)

@jptc.org:
warum gibt es in deiner source keine main Funktion?
Gruß
Werz


----------



## jptc.org (7. Okt 2003)

weil das Beispiel als Applet implementiert ist. Hättest du gerne eine main-Funktion und einen JFrame? Ich dachte, dass mit dem Applet reicht  :cry: 

Karsten Voigt
http://www.java-performance-portal.org


----------



## Werz (7. Okt 2003)

Ne, du verwechselt mich glaube ich gerade. Ich habe nicht das Problem formuliert das war deathbyaclown.
OK. Muss mich mit Applets beschäftigen.
Danke
Werz


----------



## bygones (8. Okt 2003)

Ja ich bin der Fragen steller.

@jptc.org: Vielen Dank, es klappt hervorragend !!!!

Die andere vorgeschlagenen Lösung (so weit ich sie verstanden habe) hatte ich auch probiert, da sah ich zwar auch die verschiednen Farben, nach einer Auswahl aber scheint sich das nicht zu aktualisieren, d.h. ich seh keine Veränderung der Farbe !

Trotzdem danke !


----------

