[code=java][/codeprivate class ComboBoxRenderer extends JLabel implements ListCellRenderer {        @Override
        public Component getListCellRendererComponent(JList list, Object value,
                int index, boolean isSelected, boolean cellHasFocus) {
 
             // check if this cell represents the current DnD drop location
             JList.DropLocation dropLocation = myList.getDropLocation();
             if (dropLocation != null
                     && !dropLocation.isInsert()
                     && dropLocation.getIndex() == index) {
            
             // check if this cell is selected
             } else if (isSelected) {
                 
             } else {
                  
             };
 
             return this;
         }我想做个下拉选择框,里面的选项是图片的形式该怎么写?写个Icon[] 对象数组存图片,怎么样才会显示在下拉框里面?上面的代码要怎么写?java

解决方案 »

  1.   

    http://www.java2s.com/Tutorial/Java/0240__Swing/Comboboxcellrenderer.htm
      

  2.   

    实现ListCellBenderer接口来绘制列表单元
    http://www.blogjava.net/zeyuphoenix/archive/2010/04/12/318014.html
      

  3.   

    JCombobox默认下拉显示和显示项是文本,为了显示其它内容比如图片或者更复杂的东西,则需要设置新的Renderer,JCombobox的Renderer需要实现ListCellRenderer接口.
      

  4.   


    参考了你发的类容,写成这样了还是不行怎么改?
    public class mousergister extends JPanel {
    JPanel jp;
    JComboBox setImg;
    ComboBoxRenderer renderer;

    public static void main(String[] args) {
    new mousergister();
    } public mousergister() {
    BaseFrame bf=new BaseFrame("用户注册");
    bf.add(this);
    this.setLayout(null);
    renderer = new ComboBoxRenderer();
    renderer.setPreferredSize(new Dimension(100, 50));

    Object elements[][] = {
            { new MyIcon("images/1.jpg",this)},
            { new MyIcon("images/2.gif",this) },
            { new MyIcon("images/3.jpg",this)},
            }; setImg = new JComboBox(elements);
    setImg.setRenderer(renderer);
    setImg.setBounds(120, 25, 75, 60);
    add(setImg); bf.setLocation(500, 100);// 设置窗口在屏幕的位置
    bf.setSize(320, 420);
    bf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    bf.setResizable(false);// 设置游戏窗口大小不可改变
    bf.setVisible(true); } private class ComboBoxRenderer extends JLabel implements ListCellRenderer { // 这样要是实现接口的方法: /*
     * 
     * This method finds the image and text corresponding to the selected
     * 
     * value and returns the label, set up to display the text and image.
     */ @Override
    public Component getListCellRendererComponent(JList list, Object value,
    int index, boolean isSelected, boolean cellHasFocus) { ImageIcon image=null;  if (value instanceof Object[]) {
     Object[] values = (Object[]) value;      
          image = (ImageIcon)values[0];
        }
        if (image != null) {
        
          this.setIcon(image);
        }
        return this;
      }  
    }

    private class MyIcon extends ImageIcon{
    private Image m;
    private String str;
    private mousergister jp;

    public MyIcon(String str,mousergister jp) {
    Toolkit tool;
    tool = jp.renderer.getToolkit();
    m = tool.getImage(str);
      }
     public void paintIcon(Component lab, Graphics g){
    lab=jp.renderer;
    g.drawImage(m, 20, 20, lab);


     }
    }