Java Swing How to - Change the colour of JComboBox's selected Item








Question

We would like to know how to change the colour of JComboBox's selected Item.

Answer

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
/* w  w  w  .  j  av a 2  s .co m*/
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class Main {

  public Main() {
    JComboBox comboBox = new JComboBox();
    comboBox.addItem(new Double(1));
    comboBox.addItem(new Double(2.25));
    comboBox.addItem(new Double(3.5));
    comboBox.setRenderer(new TwoDecimalRenderer(comboBox.getRenderer()));
    comboBox.setEditable(true);


    JFrame frame = new JFrame();
    frame.add(comboBox, BorderLayout.NORTH);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) throws Exception {
    new Main();
  }
}

class TwoDecimalRenderer extends DefaultListCellRenderer {

  private ListCellRenderer defaultRenderer;

  public TwoDecimalRenderer(ListCellRenderer defaultRenderer) {
    this.defaultRenderer = defaultRenderer;
  }

  @Override
  public Component getListCellRendererComponent(JList list, Object value,
      int index, boolean isSelected, boolean cellHasFocus) {
    Component c = defaultRenderer.getListCellRendererComponent(list, value,
        index, isSelected, cellHasFocus);
    if (c instanceof JLabel) {
      if (isSelected) {
        c.setBackground(Color.blue);
      } else {
        c.setBackground(Color.red);
      }
    } else {
      c.setBackground(Color.red);
      c = super.getListCellRendererComponent(list, value, index, isSelected,
          cellHasFocus);
    }
    return c;
  }
}