Java tutorial
import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.Map; import javax.swing.ComboBoxEditor; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.BevelBorder; public class MainClass extends JPanel { private IconItem items[] = { new IconItem("A", "A.gif"), new IconItem("B", "B.gif"), new IconItem("C", "C.gif") }; Map itemMap = new HashMap(); public MainClass() { // Build a mapping from book titles to their entries for (int i = 0; i < items.length; i++) { itemMap.put(items[i].getTitle(), items[i]); } setLayout(new BorderLayout()); JComboBox bookCombo = new JComboBox(items); bookCombo.setEditable(true); bookCombo.setEditor(new MyComboBoxEditor(itemMap, items[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 MainClass()); frame.pack(); frame.setVisible(true); } } class IconItem { private final String title; private final String imagePath; private ImageIcon image; public IconItem(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; } } class MyComboBoxEditor implements ComboBoxEditor { Map map; ImagePanel panel; ImageIcon questionIcon; public MyComboBoxEditor(Map m, IconItem defaultChoice) { map = m; panel = new ImagePanel(defaultChoice); questionIcon = new ImageIcon("question.gif"); } public void setItem(Object anObject) { if (anObject != null) { panel.setText(anObject.toString()); IconItem entry = (IconItem) 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); } class ImagePanel extends JPanel { JLabel imageIconLabel; JTextField textField; public ImagePanel(IconItem 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); } } }