Java JList .setCellRenderer (ListCellRenderer <? super E > cellRenderer)

Syntax

JList.setCellRenderer(ListCellRenderer <? super E > cellRenderer) has the following syntax.

public void setCellRenderer(ListCellRenderer <? super E > cellRenderer)

Example

In the following code shows how to use JList.setCellRenderer(ListCellRenderer <? super E > cellRenderer) method.


/* w w w  . j ava2  s .co m*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;

public class Main {
  public static void main(String args[]) throws Exception {
    Object elements[][] = { { new Font("Courier", Font.BOLD, 16), Color.YELLOW, "This" },
        { new Font("Helvetica", Font.ITALIC, 8), Color.DARK_GRAY, "Computer" } };

    JFrame frame = new JFrame("Complex Renderer");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JList jlist = new JList(elements);
    ListCellRenderer renderer = new ComplexCellRenderer();
    jlist.setCellRenderer(renderer);
    JScrollPane scrollPane = new JScrollPane(jlist);
    frame.add(scrollPane, BorderLayout.CENTER);

    frame.setSize(300, 200);
    frame.setVisible(true);
  }

}

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;
    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];
      theText = (String) values[2];
    } else {
      theFont = list.getFont();
      theForeground = list.getForeground();
      theText = "";
    }
    if (!isSelected) {
      renderer.setForeground(theForeground);
    }
    renderer.setText(theText);
    renderer.setFont(theFont);
    return renderer;
  }
}