Java by API/javax.swing/ComboBoxEditor

Материал из Java эксперт
Перейти к: навигация, поиск

implements ComboBoxEditor

   <source lang="java">

import java.awt.BorderLayout; import java.awt.ruponent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.Map; import javax.swing.ruboBoxEditor; 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);
   }
 }

}

      </source>