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