A fancy example of JComboBox with a custom renderer and editor : ComboBox « Swing JFC « Java

Java
1. 2D Graphics GUI
2. 3D
3. Advanced Graphics
4. Ant
5. Apache Common
6. Chart
7. Collections Data Structure
8. Database SQL JDBC
9. Design Pattern
10. Development Class
11. Email
12. Event
13. File Input Output
14. Game
15. Hibernate
16. J2EE
17. J2ME
18. JDK 6
19. JSP
20. JSTL
21. Language Basics
22. Network Protocol
23. PDF RTF
24. Regular Expressions
25. Security
26. Servlets
27. Spring
28. Swing Components
29. Swing JFC
30. SWT JFace Eclipse
31. Threads
32. Tiny Application
33. Velocity
34. Web Services SOA
35. XML
Microsoft Office Word 2007 Tutorial
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Java » Swing JFC » ComboBoxScreenshots 
A fancy example of JComboBox with a custom renderer and editor
A fancy example of JComboBox with a custom renderer and editor

/*
Java Swing, 2nd Edition
By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole
ISBN: 0-596-00408-7
Publisher: O'Reilly 
*/
// 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.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 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 "
            ((JComboBoxe.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);
  }
}

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

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 = (BookEntrymap.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);
    }
  }
}

           
       
Related examples in the same category
1. Using drop-down listsUsing drop-down lists
2. Editable ComboBoxEditable ComboBox
3. Create a simple combobox
4. Font Chooser ComboBoxFont Chooser ComboBox
5. Color combobox rendererColor combobox renderer
6. Select the combobox by choose the nearby labelSelect the combobox by choose the nearby label
7. ComoboBox loads and saves items automatically from a fileComoboBox loads and saves items automatically from a file
8. Sharing a Model between a JList and JComboBoxSharing a Model between a JList and JComboBox
9. ComboBox Demo 2ComboBox Demo 2
10. Custom ComboBox with ImageCustom ComboBox with Image
11. ComboBox DemoComboBox Demo
12. List: Shared Data SampleList: Shared Data Sample
13. Selecting Combo SampleSelecting Combo Sample
14. MultiKey ComboMultiKey Combo
15. PopupCombo SamplePopupCombo Sample
16. Dual Sample: JList and ComboBoxDual Sample: JList and ComboBox
17. ComboBox SampleComboBox Sample
18. Color ComboBox: ComboBoxEditor DemoColor ComboBox: ComboBoxEditor Demo
19. ArrayListComboBoxModel DemoArrayListComboBoxModel Demo
w__w_w__._j___a___v___a___2_s_.__c___o__m___ | Contact Us
Copyright 2003 - 08 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.