package fr.umlv.uidemo.combo;

import java.awt.Component;
import java.net.URL;

import javax.swing.*;

/**
 * @author Remi Forax
 *
 */
public class ComboExample {
  
  private Icon loadIcon(String name) {
    URL url=getClass().getResource(name);
    return (url==null)?null:new ImageIcon(url);
  }
  
  private Icon[] getPizzaIcons() {
    Icon[] icons=new ImageIcon[7];
    for(int i=0;i<icons.length;i++) {
      icons[i]=loadIcon("pizza"+(i+1)+".jpg");
    }
    return icons;
  }
 
  class PizzaModel extends AbstractListModel implements ComboBoxModel {
    public int getSize() {
      return icons.length;
    }  
    public Object getElementAt(int index) {
      return new Integer(index);
    }
    public Object getSelectedItem() {
      return item;
    }
    public void setSelectedItem(Object anItem) {
      item=anItem;
    }
    private Object item;
  }
 
  private ListCellRenderer createRenderer() {
    return new DefaultListCellRenderer() {
      public Component getListCellRendererComponent(JList list,Object value,int index,
        boolean isSelected,boolean cellHasFocus) {
      
        super.getListCellRendererComponent(list,value,index,
          isSelected,cellHasFocus);
        
        if (value!=null) {
          index=((Integer)value).intValue();
          
          setIcon(icons[index]);
          setText("Pizza "+(index+1));
        }
          
        return this;
      }
    };
  }
  
  public JComboBox createCombo(ComboBoxModel model, ListCellRenderer renderer) {
    JComboBox combo=new JComboBox(model);
    combo.setRenderer(renderer);
    return combo;
  }

  final Icon[] icons=getPizzaIcons();

  public static void main(String[] args) {
    JFrame frame=new JFrame("Pizza");
    
    ComboExample example=new ComboExample();
    
    PizzaModel model=example.new PizzaModel();
    
    ListCellRenderer renderer=example.createRenderer();
    //ListCellRenderer renderer=new DefaultListCellRenderer();
    
    JComboBox combo=example.createCombo(model,renderer);
    
    JPanel panel=new JPanel();
    panel.add(combo);
    
    frame.setContentPane(panel);
    frame.pack();
    frame.show();
  }
}
