Farbige JCombobox

  • Themenstarter Themenstarter deathbyaclown
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

deathbyaclown

Gast
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 !!!
 
So dann wollen wir das Ganze mal versuchen :wink:

Code:
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
 
bissel sehr umstaendlich, von defaultcellrenderer ableiten und das label mit opaque und color zurueckzugeben reicht (fuer den urspruenglich geforderten fall)
 
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
 
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
 
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 !
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben