Title: RE: JComboBox : nice class.

here's a nice little class I wrote:

/**
 Extends the Javax.swing.Jcombobox class to do some
 sorting
 adding/removing of vectors
 adding a member only once
 */
import  java.util.*;
import  javax.swing.*;


public class SortComboBox extends JComboBox
{
  private int selected;

  public SortComboBox (Object[] obj)
  {
    super(obj);
  }

  public SortComboBox ()
  {
    super();
  }

  public void addSingular (Object obj)
  {
    boolean found = false;
    Object tempObj = getEditor().getItem();
    for (int i = 0; i < getItemCount() && !found; i++)
    {
      if (getItemAt(i).equals(obj))
      {
        found = true;
      }
      else
      {
        found = false;
      }
    }
    if (!found)
    {
      addItem(obj);
    }
    getEditor().setItem(tempObj);
  }
  /*must go back and fix.
    sort is bassed on ASCII values*/
  public void sortItems ()
  {
    Object selected = getEditor().getItem();
    Object select = getSelectedItem();
    Object[] array = new Object[getItemCount()];
    for (int i = 0; i < getItemCount(); i++)
      array[i] = this.getItemAt(i);
    removeAllItems();
    setSelectedItem(selected);
    Arrays.sort(array);
    for (int i = 0; i < array.length; i++)
      addSingular(array[i]);
    setSelectedItem(select);
    getEditor().setItem(selected);
  }

  public Vector getElements ()
  {
    Vector temp = new Vector();
    for (int i = 0; i < getItemCount(); i++)
      temp.add(getItemAt(i));
    return  temp;
  }

  public void removeVector (Vector v)
  {
    for (int i = 0; i < v.size(); i++)
      removeItem(v.get(i));
  }

  public void addVector (Vector v)
  {
    for (int i = 0; i < v.size(); i++)
      this.addSingular(v.get(i));
  }

  public void update (final Vector v)
  {
    SwingUtilities.invokeLater(new Runnable()
    {
      public void run ()
      {
        // sort the new items first
        Object[] array = new Object[v.size()];
        for (int i = 0; i < v.size(); i++)
          array[i] = v.get(i);
        Arrays.sort(array);

        Object obj = getSelectedItem();
        removeAllItems();
        for (int i = 0; i < array.length; i++)
        {
          if (array[i] != null)
            addSingular(array[i]);
        }
        if (obj != null)
          setSelectedItem(obj);
        else if (getSelectedIndex() < 0 && getItemCount() > 0)
          setSelectedIndex(0);
        getEditor().setItem(getSelectedItem());
      }
    });
  }

}

Reply via email to