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);
}
}
}