Java Swing How to - Create date value renderer for JComboBox in 'yyyy-mm-dd' format








Question

We would like to know how to create date value renderer for JComboBox in 'yyyy-mm-dd' format.

Answer

import java.awt.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
/*from w  w w  .  j av a 2 s.  c o m*/
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;

class DateComboBoxRenderer extends DefaultListCellRenderer {
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

  public Component getListCellRendererComponent(JList list, Object value,
      int index, boolean isSelected, boolean cellHasFocus) {
    Object item = value;
    if (item instanceof Date) {
      item = dateFormat.format((Date) item);
    }
    return super.getListCellRendererComponent(list, item, index, isSelected,
        cellHasFocus);
  }
}

public class Main {
  public static void main(String[] str) {
    JComboBox combo = new JComboBox();
    GregorianCalendar calendar = new GregorianCalendar();
    combo.addItem(calendar.getTime());

    calendar.roll(GregorianCalendar.DAY_OF_MONTH, 1);
    combo.addItem(calendar.getTime());

    combo.setRenderer(new DateComboBoxRenderer());

    JFrame frame = new JFrame();

    JPanel panel = new JPanel();
    panel.add(new JLabel("Date Combo: "));
    panel.add(combo);

    frame.add(panel);
    frame.pack();
    frame.setVisible(true);
  }

}