ComboBox Renderer (nicht ListRenderer)

Vatar

Erfahrenes Mitglied
Moin Moin.
Der titel ist vielleicht nicht ganz klar. Ich benötige einen Renderer der mir den Hintergrund rot malt wenn der Wert "---" (Startwert) gewählt wird, wenn dieses Feld mandatory ist. Alles was ich hinbekomme ist ein Renderer für die aufklappende JList. Ums nochmal genau auszudrücken: wenn ich die ComboBox verlasse und der Wert "---" noch gewählt ist/wurde soll der Hintergrund der Rot sein.

thx
 
Also wenn ich das rechtverstanden habe, sollte es so gehen:

du musst einen eigenen ItemListener erstellen, bei welchem du abfängst ob etwas aus der JComboBox-Liste ausgewähtl wurde.

Dort setzt du dann die Farbe des Editors der JComboBox.

So kriegst den Editor der ComboBox:

Code:
comboBox.getEditor().getEditorComponent().setBackground(Color.red);

wobei comboBox die Variabel auf deine ComboBox ist.

hoffe konnte dir helfen :)
 
Danke für den Tipp,
aber es geht viel viel viel einfacher. Man braucht überhaupt keinen Renderer oder Editor. Alles was man braucht ist ein ItemListener und die methode 'setBackground(...)'. ;-)
Code:
    /* Renders the Background for the Combobox in a light red 
     * if no value (nullValue) is selected */
    public void itemStateChanged( ItemEvent e ) {
        MyComboBox box = (MyComboBox)e.getSource();
        String value = box.getSelectedItem().toString();
        if(value.matches("---") && box.isMandatory())
            setBackground(new Color(255, 170, 160));
        else
            setBackground(Color.white);
    }

Aber nochmals danke
 
Habe das selbe Problem auch

das mit dem setBackground ist ja schön und gut, leider wird dabei der Button auch eingefärbt was ich eigentlich vermeiden möchte.

Hat jemand eine Idee wie dies Lösbar ist?

greez
 
Hi,
für das Aussehen einer Komponente ist deren zugehörige UI-Klasse zuständig. Wenn der Hintergrund des Buttons nicht eingefärbt werden soll, dann musst du eine neue UI-Klasse erstellen und deiner CombBox zuweisen.Habs nun nicht groß getestet, aber ungefähr so müsste es klappen:
//Zuweisen der neuen UI
Code:
yourComboBox.setUI(new CustomBoxUI());

//Die neue UI Klasse
Code:
public class CustomBoxUI extends MetalComboBoxUI{

    @Override
    public PropertyChangeListener createPropertyChangeListener() {
        return new CustomPropertyChangeListener();
    }
    class CustomPropertyChangeListener extends MetalPropertyChangeListener {
        public void propertyChange(PropertyChangeEvent e) {
            super.propertyChange( e );
            String propertyName = e.getPropertyName();

            if ( propertyName.equals("background" )) {
                Color color = (Color)e.getNewValue();
                arrowButton.setBackground(UIManager.getColor("ComboBox.background"));
                listBox.setBackground(color);

            }
        }
       
    }

}

Viele Grüße!
 
Zurück