Hi ich habe eine JComboBox erstellt.
In der ComboBox sind Elemente mit den Bezeichnungen:
"One"
"Two"
"Three"
"Four"
drin. Klappt man die ComboBox auf so werden das Element "Two" und "Four" in grauer Schrift
angezeigt. Die Elemente "One" und "Three" in schwarzer Schrift.
Fährt man mit dem Mauszeiger über die Elemente "Two" und Four" so ist die Textfarbe weiß und der
Hintergrund grau.
Fährt man mit dem Mauszeigen über die Elemente "One" und "Three" so ist die Schriftfarbe weiß und der Hintergrund blau.
Soweit so gut.
Aber wähle ich ein Element aus so ist der Hintergrund in Hauptanzeigefenster weiß. Genauer gesagt er ist immer weiß, anstatt grau, so wie es sein sollte wenn man comboBox.setEditable(false); gesetzt hat und keinen eigenen ListCellRenderer verwendet.
Wie kriege ich es hin dass das der Hauptanzeige Bereich der JComboBox immer eine graue Hintergrundfarbe hat und nicht wie momentan weiß?
Achtung: Die Hintergrundfarbe soll nicht einfach nur Hellgrau sein, sondern auch diesen drei Dimensionalen Effekt der sich aus einem hellen in der oberen Anzeigehälfte und einem dunklen Grau Ton in der unteren Anzeigehälfte ergibt. Der Aufruf comboBox.setBackground(Color.LIGHT_GRAY); ist also keine Lösung.
An diesen beiden Seiten habe ich mich übrigens orientiert.
Der erste Link bezieht sich auf eine JList der zweite auf eine JComboBox.
Java Schriftfarbe in JList ändern :: Ein Karlsruher Bloggt!
Java CodeGuru: (none)
In der ComboBox sind Elemente mit den Bezeichnungen:
"One"
"Two"
"Three"
"Four"
drin. Klappt man die ComboBox auf so werden das Element "Two" und "Four" in grauer Schrift
angezeigt. Die Elemente "One" und "Three" in schwarzer Schrift.
Fährt man mit dem Mauszeiger über die Elemente "Two" und Four" so ist die Textfarbe weiß und der
Hintergrund grau.
Fährt man mit dem Mauszeigen über die Elemente "One" und "Three" so ist die Schriftfarbe weiß und der Hintergrund blau.
Soweit so gut.
Aber wähle ich ein Element aus so ist der Hintergrund in Hauptanzeigefenster weiß. Genauer gesagt er ist immer weiß, anstatt grau, so wie es sein sollte wenn man comboBox.setEditable(false); gesetzt hat und keinen eigenen ListCellRenderer verwendet.
Wie kriege ich es hin dass das der Hauptanzeige Bereich der JComboBox immer eine graue Hintergrundfarbe hat und nicht wie momentan weiß?
Achtung: Die Hintergrundfarbe soll nicht einfach nur Hellgrau sein, sondern auch diesen drei Dimensionalen Effekt der sich aus einem hellen in der oberen Anzeigehälfte und einem dunklen Grau Ton in der unteren Anzeigehälfte ergibt. Der Aufruf comboBox.setBackground(Color.LIGHT_GRAY); ist also keine Lösung.
Java:
JComboBox comboBox = new JComboBox();
comboBox.setMaximumRowCount(5);
comboBox.setRenderer(new LabelListCellRenderer());
comboBox.setEditable(false);
ListValue one = new ListValue("One");
ListValue two = new ListValue("Two");
ListValue three = new ListValue("Three");
ListValue four = new ListValue("Four");
two.setTextValueColor(Color.GRAY);
four.setTextValueColor(Color.GRAY);
comboBox.addItem(one);
comboBox.addItem(two);
comboBox.addItem(three);
comboBox.addItem(four);
Java:
public class LabelListCellRenderer extends JLabel implements ListCellRenderer
{
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
ListValue listValue = (ListValue)value;
this.setText(listValue.getTextValue());
//ACHTUNG: Setze ich diesen Wert auf false, so habe ich die erwünschte
//graue dreidimensionale Hintergrundfarbe im Hauptanzeigebereich der
// JComboBox allerinds sieht man dann beim Überfahren der einzelnen Auswahl
// Elemente nicht mehr den blauen bzw. Grauen Hintergrundbalken
this.setOpaque(true);
if(isSelected)
{
this.setForeground(UIManager.getColor("List.selectionForeground"));
if(listValue.getTextValueColor().equals(Color.GRAY))
this.setBackground(listValue.getTextValueColor());
else this.setBackground(UIManager.getColor("List.selectionBackground"));
}
else
{
this.setForeground(listValue.getTextValueColor());
this.setBackground(UIManager.getColor("List.background"));
}
return this;
}
}
Java:
public class ListValue
{
private String textValue;
private Color textValueColor;
public ListValue(String textValue)
{
this.textValue = textValue;
this.textValueColor = Color.BLACK;
}
public String getTextValue()
{
return textValue;
}
public void setTextValue(String textValue)
{
this.textValue = textValue;
}
public Color getTextValueColor()
{
return textValueColor;
}
public void setTextValueColor(Color textValueColor)
{
this.textValueColor = textValueColor;
}
@Override
public String toString()
{
return this.textValue;
}
}
An diesen beiden Seiten habe ich mich übrigens orientiert.
Der erste Link bezieht sich auf eine JList der zweite auf eine JComboBox.
Java Schriftfarbe in JList ändern :: Ein Karlsruher Bloggt!
Java CodeGuru: (none)
Zuletzt bearbeitet: