Combobox cell renderer : JComboBox « Swing « Java Tutorial

Combobox cell renderer
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

class ComplexCellRenderer implements ListCellRenderer {
  protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

  public Component getListCellRendererComponent(JList list, Object value, int index,
      boolean isSelected, boolean cellHasFocus) {
    Font theFont = null;
    Color theForeground = null;
    Icon theIcon = null;
    String theText = null;

    JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,
        isSelected, cellHasFocus);

    if (value instanceof Object[]) {
      Object values[] = (Object[]) value;
      theFont = (Font) values[0];
      theForeground = (Color) values[1];
      theIcon = (Icon) values[2];
      theText = (String) values[3];
    } else {
      theFont = list.getFont();
      theForeground = list.getForeground();
      theText = "";
    if (!isSelected) {
    if (theIcon != null) {
    return renderer;

public class ComplexRenderingSample {
  public static void main(String args[]) {
    Object elements[][] = {
        { new Font("Helvetica", Font.PLAIN, 20), Color.RED, new MyIcon(), "A" },
        { new Font("TimesRoman", Font.BOLD, 14), Color.BLUE, new MyIcon(), "A" },
        { new Font("Courier", Font.ITALIC, 18), Color.GREEN, new MyIcon(), "A" },
        { new Font("Helvetica", Font.BOLD | Font.ITALIC, 12), Color.GRAY, new MyIcon(), "A" },
        { new Font("TimesRoman", Font.PLAIN, 32), Color.PINK, new MyIcon(), "A" },
        { new Font("Courier", Font.BOLD, 16), Color.YELLOW, new MyIcon(), "A" },
        { new Font("Helvetica", Font.ITALIC, 8), Color.DARK_GRAY, new MyIcon(), "A" } };

    JFrame frame = new JFrame("Complex Renderer");

    ListCellRenderer renderer = new ComplexCellRenderer();
    JComboBox comboBox = new JComboBox(elements);
    frame.add(comboBox, BorderLayout.NORTH);
    frame.setSize(300, 200);

class MyIcon implements Icon {

  public MyIcon() {

  public int getIconHeight() {
    return 20;

  public int getIconWidth() {
    return 20;

  public void paintIcon(Component c, Graphics g, int x, int y) {
    g.drawRect(0, 0, 25, 25);

14.12.1.Creating JComboBox Components
14.12.2.Add Items to JComboBoxAdd Items to JComboBox
14.12.3.Get selected Item from JComboBoxGet selected Item from JComboBox
14.12.4.Getting and Setting the Selected Item in a JComboBox Component
14.12.5.Editable JComboBox
14.12.6.If the combobox is editable, the new value can be any value
14.12.7.Listen to JComboBox with ItemListenerListen to JComboBox with ItemListener
14.12.8.Sharing the Data Model between two JComboBoxesSharing the Data Model between two JComboBoxes
14.12.9.Sharing the Data Model for a JComboBox and JListSharing the Data Model for a JComboBox and JList
14.12.10.Editing JComboBox ElementsEditing JComboBox Elements
14.12.11.Listening to Keyboard Events with a KeySelectionManager
14.12.12.A Color Combo Box EditorA Color Combo Box Editor
14.12.13.Setting ComboBox Editor and ComboBox RendererSetting ComboBox Editor and ComboBox Renderer
14.12.14.Combobox cell rendererCombobox cell renderer
14.12.15.Custom JComboBox Pop-up ButtonCustom JComboBox Pop-up Button
14.12.16.JComboBox Using the Custom ModelJComboBox Using the Custom Model
14.12.17.Get Model from JComboBox and set it to JList
14.12.18.Adding and Removing an Item in a JComboBox Component
14.12.19.Add an item to the end of the list
14.12.20.Add an item after the first item
14.12.21.Getting the Items in a JComboBox Component
14.12.22.Remove first item
14.12.23.Remove the last item
14.12.24.Remove all items
14.12.25.Determining When the Menu of a JComboBox Component Is Displayed
14.12.26.Listening for Action Events from a JComboBox Component
14.12.27.Listening for Changes to the Selected Item in a JComboBox Component
14.12.28.Setting the Number of Visible Items in the Menu of a JComboBox Component
14.12.29.Displaying the Menu in a JComboBox Component Using a Keystroke If the Selected Item Is Not Unique
14.12.30.Determining If the Menu of a JComboBox Component Is Visible
14.12.31.Displaying the Menu in a JComboBox Component Using a Keystroke
14.12.32.Selecting an Item in a JComboBox Component with Multiple Keystrokes
14.12.33.Customizing a JComboBox Look and Feel