import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ImageComboBox extends JComboBox {
 private String[] str;
 private ImageIcon[] icon;
 
 public ImageComboBox(String[] str,ImageIcon[] icon) {
this.str = str;
this.icon = icon;

ItemObject[] obj = new ItemObject[this.str.length];

for (int i=0; i<str.length; i++) {
obj[i] = new ItemObject(this.str[i],this.icon[i]);
}

JComboBox jcb = new JComboBox(obj);
jcb.setRenderer(new ACellRenderer());
jcb.setMaximumRowCount(3);
 }
 
 public static void main(String[] args) {
String[] s = {"西瓜","苹果","草莓","香蕉","葡萄"};
ImageIcon[] icons= new ImageIcon[5];
for(int i=0; i < 5; i++)
        {
             icons[i] = new ImageIcon(i+".gif");
        }

JFrame jf = new JFrame("test");
ImageComboBox icombo = new ImageComboBox(s,icons);

jf.add(icombo);
jf.pack();
jf.setSize(400,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
} }class ItemObject {
public String name;
public ImageIcon icon;

public ItemObject(String name,ImageIcon icon) {
this.name = name;
this.icon = icon;
}
}class ACellRenderer extends JLabel implements ListCellRenderer
{
     ACellRenderer() {
        setOpaque(true);
    }
    
    public Component getListCellRendererComponent(JList list,
                                                  Object value,
                                                  int index,
                                                  boolean isSelected,
                                                  boolean cellHasFocus)
    {
        if (value != null) {
            setText(((ItemObject)value).name);
            setIcon(((ItemObject)value).icon);
        }        if (isSelected) {
            setBackground(list.getSelectionBackground());
            setForeground(list.getSelectionForeground());
        }
        else {
            setBackground(list.getBackground());
            setForeground(list.getForeground());
        }        return this;
    }    
}
上面的代码是我按照http://edu.gamfe.com/tutor/d/8114.html改来的

解决方案 »

  1.   

    然后,当然是没有出来效果。我想要实现的效果是下拉选项带图标的JComboxBox
      

  2.   

    额,只看了构造方法,觉得最后三行是不是应该改成:
    去掉: JComboBox jcb = new JComboBox(obj);      
           this.setRenderer(new ACellRenderer());
           this.setMaximumRowCount(3);
      

  3.   

    这个问题我已经解决了,下面上分享一下我的代码,这个类JImageComboBox实现了在ComboBox下拉菜单中放置图标和文字:import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class JImageComboBox extends JComboBox {
    public JImageComboBox(ItemObject[] obj) {
    super(obj);
    setRenderer(new ACellRenderer());
    //setMaximumRowCount();
    }
    }class ItemObject {
    public String name;
    public ImageIcon icon;

    public ItemObject(String name,ImageIcon icon) {
    this.name = name;
    this.icon = icon;
    }
    }class ACellRenderer extends JLabel implements ListCellRenderer
    {
         ACellRenderer() {
            setOpaque(true);
        }
        
        public Component getListCellRendererComponent(JList list,
                                                      Object value,
                                                      int index,
                                                      boolean isSelected,
                                                      boolean cellHasFocus)
        {
            if (value != null) {
                setText(((ItemObject)value).name);
                setIcon(((ItemObject)value).icon);
            }        if (isSelected) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            }
            else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }        return this;
        }    
    }