我想要的效果是:左图片,右文字,同在一个JComboBox项中。有谁知道怎么做吗?我先谢谢啦!

解决方案 »

  1.   

    // BookEntry.java
    // A simple aggregate class to store a book's title and icon.
    //import javax.swing.ImageIcon;public class BookEntry {
        private final String title;
        private final String imagePath;
        private ImageIcon image;    public BookEntry(String title, String imagePath) {
            this.title = title;
            this.imagePath = imagePath;
        }    public String getTitle() { return title; }
        
        public ImageIcon getImage() {
            if (image == null) {
                image = new ImageIcon(imagePath);
            }
            return image;
        }    // Override standard toString method to give a useful result
        public String toString() { return title; }
    }
      

  2.   

    //  ComboBoxEditorExample.java
    // A custom combobox editor for use with the EditableComboBox class.
    //
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.border.*;public class ComboBoxEditorExample implements ComboBoxEditor
    {
        Map map;
        ImagePanel panel;
        ImageIcon questionIcon;
     
        public ComboBoxEditorExample(Map m, BookEntry defaultChoice) {
            map = m;
            panel = new ImagePanel(defaultChoice); 
            questionIcon = new ImageIcon("question.gif"); 
        }    public void setItem(Object anObject)
        {
            if (anObject != null) {
                panel.setText(anObject.toString());
                BookEntry entry = (BookEntry)map.get(anObject.toString());
                if (entry != null)
                    panel.setIcon(entry.getImage());
                else
                    panel.setIcon(questionIcon);
            } 
        }    public Component getEditorComponent() { return panel; }
        public Object getItem() { return panel.getText(); }
        public void selectAll() { panel.selectAll(); }    public void addActionListener(ActionListener l) {
            panel.addActionListener(l); 
        }    public void removeActionListener(ActionListener l) {
            panel.removeActionListener(l); 
        }    //  We create our own inner class to handle setting and
        //  repainting the image and the text.
        class ImagePanel extends JPanel {
           
            JLabel imageIconLabel;
            JTextField textField;        public ImagePanel(BookEntry initialEntry) {
                setLayout(new BorderLayout());            imageIconLabel = new JLabel(initialEntry.getImage());
                imageIconLabel.setBorder(new BevelBorder(BevelBorder.RAISED));            textField = new JTextField(initialEntry.getTitle());
                textField.setColumns(45);
                textField.setBorder(new BevelBorder(BevelBorder.LOWERED));            add(imageIconLabel, BorderLayout.WEST);
                add(textField, BorderLayout.EAST);
            }        public void setText(String s) { textField.setText(s); }
            public String getText() { return (textField.getText()); }        public void setIcon(Icon i) {
                imageIconLabel.setIcon(i);
                repaint();
            }        public void selectAll() { textField.selectAll(); }        public void addActionListener(ActionListener l) {
                textField.addActionListener(l); 
            }
            public void removeActionListener(ActionListener l) {
                textField.removeActionListener(l); 
            }
        }
    }
      

  3.   

    //  EditableComboBox.java
    // A fancy example of JComboBox with a custom renderer and editor used to
    // display a list of JLabel objects that include both text and icons.
    //
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;public class EditableComboBox extends JPanel {    private BookEntry books[] = {
               new BookEntry("Ant: The Definitive Guide", "covers/ant.gif"),
               new BookEntry("Database Programming with JDBC and Java",
                             "covers/jdbc.gif"),
               new BookEntry("Developing Java Beans", "covers/beans.gif"),
               new BookEntry("Developing JSP Custom Tag Libraries",
                             "covers/jsptl.gif"),
               new BookEntry("Java 2D Graphics", "covers/java2d.gif"),
               new BookEntry("Java and XML", "covers/jxml.gif"),
               new BookEntry("Java and XSLT", "covers/jxslt.gif"),
               new BookEntry("Java and SOAP", "covers/jsoap.gif"),
               new BookEntry("Java and XML Data Binding", "covers/jxmldb.gif"),
               new BookEntry("Java Cookbook", "covers/jcook.gif"),
               new BookEntry("Java Cryptography", "covers/jcrypto.gif"),
               new BookEntry("Java Distributed Computing", "covers/jdist.gif"),
               new BookEntry("Java I/O", "covers/javaio.gif"),
               new BookEntry("Java in a Nutshell", "covers/javanut.gif"),
               new BookEntry("Java Management Extensions", "covers/jmx.gif"),
               new BookEntry("Java Message Service", "covers/jms.gif"),
               new BookEntry("Java Network Programming", "covers/jnetp.gif"),
               new BookEntry("Java Performance Tuning", "covers/jperf.gif"),
               new BookEntry("Java RMI", "covers/jrmi.gif"),
               new BookEntry("Java Security", "covers/jsec.gif"),
               new BookEntry("JavaServer Pages", "covers/jsp.gif"),
               new BookEntry("Java Servlet Programming", "covers/servlet.gif"),
               new BookEntry("Java Swing", "covers/swing.gif"),
               new BookEntry("Java Threads", "covers/jthread.gif"),
               new BookEntry("Java Web Services", "covers/jws.gif"),
               new BookEntry("Learning Java", "covers/learnj.gif")
        };    Map bookMap = new HashMap();    public EditableComboBox() {
          // Build a mapping from book titles to their entries
          for (int i = 0 ; i < books.length; i++) {
            bookMap.put(books[i].getTitle(), books[i]);
          }      setLayout(new BorderLayout());       JComboBox bookCombo = new JComboBox(books);
          bookCombo.setEditable(true);
          bookCombo.setEditor(
            new ComboBoxEditorExample(bookMap, books[0]));
          bookCombo.setMaximumRowCount(4);
          bookCombo.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                  System.out.println("You chose " + ((JComboBox)e.getSource()).
                                                    getSelectedItem()  + "!"); 
              }
          });
          bookCombo.setActionCommand("Hello");
          add(bookCombo, BorderLayout.CENTER);
        }    public static void main(String s[]) {
             JFrame frame = new JFrame("Combo Box Example");
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setContentPane(new EditableComboBox());
             frame.pack();
             frame.setVisible(true);
        }
    }
      

  4.   

    To:chenweionline(键盘上的舞者)
    您可能误解了我的意思,我想让JComboBox里的每一项都有不同的图片和文字,即把图片和文字加入到JComboBox的每一项中,而不是固定图片。
      

  5.   

    JComboBox的每一项是不同啊,使用books[]填充的嘛,你仔细看看。
      

  6.   

    我也想知道,特别是加入到JList中,怎么做谢谢大家