在JComboBox中可以插入JLabel??????
我不知道,只是用过JComboBox.addItem(String)
是不是addItem这个函数不行呀?看看有没有人知道的

解决方案 »

  1.   

    you can implements ListCellRenderer interface, Then set the list's CellRenderer is you implement class entity.
      

  2.   

    zombieLi(其实呀,呵呵,笑笑而已)说的是正确的,swing 使用的mvc模式,因此数据,控制,和显示是分开的,但是这个模式的好处可以方便扩充。写一个JLabel的子类实现 ListCellRenderer接口,override 这个方法getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) ,将返回的对象,变成设置好了文字和图片的label。就可以搞定,另外,在显示设置中要重置显示方式。
    如需要源码,留下e_mail
      

  3.   

    我需要源码,[email protected],谢谢。
      

  4.   

    public class LabelCellRender extends JLabel implements ListCellRenderer {  public LabelCellRender() {
        this.setOpaque(true);
      }  public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        if(value!=null)
        {
          setText(value.toString());
          setBackground(isSelected ? Color.darkGray: Color.white);
          setForeground(isSelected ? Color.white : Color.black);
        }
        return this;
      }
    }
        LabelCellRender label = new LabelCellRender();
        label.setIcon(new ImageIcon("c:/1.gif"));
        box.setRenderer(label);
        box.addItem("asdfs");
        box.addItem("bbbbccc");
      

  5.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;/*
     * iconStrings数组表示一个图片列表。注意将五张不同的gif图片放到类文件的同级
     *目录下的images文件夹中,然后运行程序!
      */
    public class CustomComboBoxDemo extends JPanel {
        ImageIcon[] images;
        String[] iconStrings = {"1", "2", "3", "4", "5"};
        public CustomComboBoxDemo() {
            //Load the pet images and create an array of indexes.
            images = new ImageIcon[iconStrings.length];
            Integer[] intArray = new Integer[iconStrings.length];
            for (int i = 0; i < iconStrings.length; i++) {
                intArray[i] = new Integer(i);
                images[i] = createImageIcon("images/" + iconStrings[i] + ".gif");
                if (images[i] != null) {
                    images[i].setDescription(iconStrings[i]);
                }
            }        //Create the combo box.
            JComboBox petList = new JComboBox(intArray);
            ComboBoxRenderer renderer= new ComboBoxRenderer();
            renderer.setPreferredSize(new Dimension(200, 130));
            petList.setRenderer(renderer);
            petList.setMaximumRowCount(3);        //Lay out the demo.
            setLayout(new BorderLayout());
            add(petList, BorderLayout.PAGE_START);
            setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
        }    /** Returns an ImageIcon, or null if the path was invalid. */
        protected static ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = CustomComboBoxDemo.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println("Couldn't find file: " + path);
                    return null;
            }
        }    public static void main(String s[]) {
            //Make sure we have nice window decorations.
            JFrame.setDefaultLookAndFeelDecorated(true);        //Create and set up the window.
            JFrame frame = new JFrame("CustomComboBoxDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setContentPane(new CustomComboBoxDemo());        //Display the window.
            frame.pack();
            frame.setVisible(true);
        }    class ComboBoxRenderer extends JLabel
                               implements ListCellRenderer {
            private Font uhOhFont;        public ComboBoxRenderer() {
                setOpaque(true);
                setHorizontalAlignment(CENTER);
                setVerticalAlignment(CENTER);
            }        /*
             * This method finds the image and text corresponding
             * to the selected value and returns the label, set up
             * to display the text and image.
             */
            public Component getListCellRendererComponent(
                                               JList list,
                                               Object value,
                                               int index,
                                               boolean isSelected,
                                               boolean cellHasFocus) {
                //Get the selected index. (The index param isn't
                //always valid, so just use the value.)
                int selectedIndex = ((Integer)value).intValue();            if (isSelected) {
                    setBackground(list.getSelectionBackground());
                    setForeground(list.getSelectionForeground());
                } else {
                    setBackground(list.getBackground());
                    setForeground(list.getForeground());
                }            //Set the icon and text.  If icon was null, say so.
                ImageIcon icon = images[selectedIndex];
                String iconName = iconStrings[selectedIndex];
                setIcon(icon);
                if (icon != null) {
                    setText(iconName);
                    setFont(list.getFont());
                } else {
                    setUhOhText(iconName + " (no image available)",
                                list.getFont());
                }            return this;
            }        //Set the font and text when no image was found.
            protected void setUhOhText(String uhOhText, Font normalFont) {
                if (uhOhFont == null) { //lazily create this font
                    uhOhFont = normalFont.deriveFont(Font.ITALIC);
                }
                setFont(uhOhFont);
                setText(uhOhText);
            }
        }
    }