import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;

public class ListCellRendererDemo extends JApplet {
  private final static int NUMBER_OF_NATIONS = 7;
  private String[] nations = new String[]
    {"Denmark", "Germany", "China", "India", "Norway", "UK", "US"};
  private ImageIcon[] icons = new ImageIcon[NUMBER_OF_NATIONS];
  private ImageIcon[] bigIcons = new ImageIcon[NUMBER_OF_NATIONS];

  // Create a list model
  private DefaultListModel listModel = new DefaultListModel();

  // Create a list using the list model
  private JList jlstNations = new JList(listModel);

  // Create a list cell renderer
  private ListCellRenderer renderer = new MyListCellRenderer();

  // Create a split pane
  private JSplitPane jSplitPane1 = new JSplitPane();

  // Create a label for displaying iamge
  private JLabel jlblImage = new JLabel("", JLabel.CENTER);

  /** Construct ListCellRenderer */
  public ListCellRendererDemo() {
    // Load small and large image icons
    for (int i = 0; i < NUMBER_OF_NATIONS; i++) {
      icons[i] = new ImageIcon(getClass().getResource(
        "/image/flagIcon" + i + ".gif"));
      listModel.addElement(new Object[]{icons[i], nations[i]});

      bigIcons[i] = new ImageIcon(getClass().getResource(
        "/image/flag" + i + ".gif"));
    }

    // Set list cell renderer
    jlstNations.setCellRenderer(renderer);
    jlstNations.setPreferredSize(new Dimension(200, 200));
    jSplitPane1.setLeftComponent(new JScrollPane(jlstNations));
    jSplitPane1.setRightComponent(jlblImage);
    jlstNations.setSelectedIndex(0);
    jlblImage.setIcon(bigIcons[0]);
    add(jSplitPane1, BorderLayout.CENTER);

    // Register listener
    jlstNations.addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        jlblImage.setIcon(bigIcons[jlstNations.getSelectedIndex()]);
      }
    });
  }

  public static void main(String[] args) {
    ListCellRendererDemo applet = new ListCellRendererDemo();
    JFrame frame = new JFrame();
    //EXIT_ON_CLOSE == 3
    frame.setDefaultCloseOperation(3);
    frame.setTitle("ListCellRendererDemo");
    frame.getContentPane().add(applet, BorderLayout.CENTER);
    applet.init();
    applet.start();
    frame.setSize(400, 320);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}