下面这段程序有些问题,,不知道怎么才能正确使用。。
import java.awt.Component;
import java.awt.Dimension;import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.SwingUtilities;public class CustomCombox extends JFrame {
JComboBox com;
    ImageIcon image;
    ComboBoxRenderer cb=new ComboBoxRenderer();
CustomCombox() {
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
com=new JComboBox();
cb.setPreferredSize(new Dimension(100, 30));
//com.setPreferredSize(new Dimension(100, 30));
com.setRenderer(cb);
add(com);
setVisible(true);
} class ComboBoxRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {

int selectedIndex = ((Integer)value).intValue();

for(int i=0;i<selectedIndex;i++)
{
image=new ImageIcon("image/face/" + i + ".gif");
setText("i");
setIcon(image);
}
return null;
} }
public static void main(String[] args)
{
 SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new CustomCombox();
            }
        });
}
}

解决方案 »

  1.   

    class MyCellRenderer extends JLabel implements ListCellRenderer {
         public MyCellRenderer() {
             setOpaque(true);
         }     public Component getListCellRendererComponent(JList list,
                                                       Object value,
                                                       int index,
                                                       boolean isSelected,
                                                       boolean cellHasFocus) {         setText(value.toString());         Color background;
             Color foreground;         // check if this cell represents the current DnD drop location
             JList.DropLocation dropLocation = list.getDropLocation();
             if (dropLocation != null
                     && !dropLocation.isInsert()
                     && dropLocation.getIndex() == index) {             background = Color.BLUE;
                 foreground = Color.WHITE;         // check if this cell is selected
             } else if (isSelected) {
                 background = Color.RED;
                 foreground = Color.WHITE;         // unselected, and not the DnD drop location
             } else {
                 background = Color.WHITE;
                 foreground = Color.BLACK;
             };         setBackground(background);
             setForeground(foreground);         return this;
         }
     }
    jdk提供的例子。
      

  2.   


    getListCellRendererComponent方法的返回值,
    不能用return null; 用return this;
      

  3.   

    http://www.java2s.com/CN/Code/Java/Swing-JFC/extendsListCellRenderertodisplayicons.htmhttp://dev.yesky.com/13/2222513_1.shtmlhttp://blog.csdn.net/waterson/archive/2009/07/30/4395702.aspx很少做swing,找了几篇文章,楼主可以借鉴一下。
      

  4.   


    ListCellRenderer是JList、JComboBox的渲染器接口。
    public interface ListCellRenderer{
        /* 返回一渲染组件显示列表中的某个选项(return this)。参数list是正在渲染的列表,value是列表中当前正在渲染的项,index是当前正在渲染的项的索引,isSelected是当前项是否选中,cellHasFocus是指当前项是否拥有焦点。*/
        Component getListCellRendererComponent(
            JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus);
    }
      

  5.   

    getListCellRendererComponent参数怎么传入的。。我的程序中value怎么会是null.......
      

  6.   

    JComboBox要给个初始size,对应需要加载的图片数,另外加载图片用for循环也是有问题的
    import java.awt.Component;
    import java.awt.Dimension;
    import javax.swing.ImageIcon;
    import javax.swing.JComboBox;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.ListCellRenderer;
    import javax.swing.SwingUtilities;public class CustomCombox extends JFrame {
    JComboBox com;
    ImageIcon image;
    ComboBoxRenderer cb = new ComboBoxRenderer(); CustomCombox() {
    setSize(300, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            Integer[] intArray = new Integer[3];
            for (int i = 0; i < intArray.length; i++) {
                intArray[i] = new Integer(i);
            }

    com = new JComboBox(intArray);

    cb.setPreferredSize(new Dimension(100, 30));
    com.setPreferredSize(new Dimension(100, 30));
    com.setRenderer(cb); add(com);
    setVisible(true);
    } class ComboBoxRenderer extends JLabel implements ListCellRenderer {
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
    boolean cellHasFocus) {
    int selectedIndex = ((Integer) value).intValue();
    for(int i = 0; i < selectedIndex; i++) {
    image = new ImageIcon("resource/" + i + ".gif");
    setText("i");
    setIcon(image);
    }
    return this;
    }
    } public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    new CustomCombox();
    }
    });
    }
    }
      

  7.   

    我学java学得不好,,还是没搞懂,能不能说得详细点不过。我的程序是要用JComboBox的。。
      

  8.   

    JComboBox的内容public JComboBox(Object[] items) 不就相当于一个List嘛
      

  9.   

    我已经添加了,,但还是不行。
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;import javax.swing.ImageIcon;
    import javax.swing.JComboBox;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.ListCellRenderer;
    import javax.swing.SwingUtilities;public class CustomCombox extends JFrame {
    JComboBox com;
        ImageIcon image=new ImageIcon("image/face/1.gif");
        ComboBoxRenderer cb;
        String[] petStrings = {"Bird", "Cat", "Dog", "Rabbit", "Pig"};
        Integer[] intArray = new Integer[petStrings.length];
    CustomCombox() {
    setSize(300,300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    com=new JComboBox(intArray);
    cb=new ComboBoxRenderer();
    cb.setPreferredSize(new Dimension(100, 30));
    com.setPreferredSize(new Dimension(100, 30));
    com.setMaximumRowCount(15);
    com.setRenderer(cb);
    com.setMaximumRowCount(15);
    add(com,BorderLayout.NORTH);
    setVisible(true);
    } class ComboBoxRenderer extends JLabel implements ListCellRenderer { ComboBoxRenderer()
    {
    setOpaque(true);
    }
    public Component getListCellRendererComponent(JList list, Object value,
    int index, boolean isSelected, boolean cellHasFocus) {
    //int selectedIndex = ((Integer)value).intValue();
     System.out.println(value+" "+index);

    return this;
    } }
    public static void main(String[] args)
    {
     SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new CustomCombox();
                }
            });
    }
    }
      

  10.   

    我明白了,,,我以为value是列表的顺序值,肯定是数值1,2,3,4..........原来是size的当前值.
    真的非常谢谢楼上,为了这个问题,,都研究了两天了,现在终于有点眉目了..
      

  11.   

    人为设置了正好用来当List的index,来调图片数组的图片