ca.odell.glazedlists.swing.DefaultEventComboBoxModel Maven / Gradle / Ivy
Show all versions of glazedlists_java15 Show documentation
/* Glazed Lists (c) 2003-2006 */
/* http://publicobject.com/glazedlists/ publicobject.com,*/
/* O'Dell Engineering Ltd.*/
package ca.odell.glazedlists.swing;
import ca.odell.glazedlists.EventList;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.SwingUtilities;
import javax.swing.event.ListDataEvent;
/**
* A combo box model for displaying Glazed Lists in a combo box.
*
* The DefaultEventComboBoxModel class is not thread-safe. Unless
* otherwise noted, all methods are only safe to be called from the event
* dispatch thread. To do this programmatically, use {@link SwingUtilities#invokeAndWait(Runnable)}
* and wrap the source list (or some part of the source list's pipeline) using
* {@link GlazedListsSwing#swingThreadProxyList(EventList)}.
*
*
The implementation of {@link #setSelectedItem} and {@link #getSelectedItem}
* is not in any way tied to the contents of the list.
*
* @see Glazed Lists Tutorial
*
* @author Jesse Wilson
*/
public class DefaultEventComboBoxModel extends DefaultEventListModel implements ComboBoxModel {
/** the currently selected item which typically belong to the source list */
private Object selected;
/**
* Creates a new combo box model that contains the elements of the given
* source
and tracks further changes made to it.
*
* @param source the EventList that provides the elements
*/
public DefaultEventComboBoxModel(EventList source) {
this(source, false);
}
/**
* Creates a new combo box model that contains the elements of the given
* source
and tracks further changes made to it.
*
* @param source the EventList that provides the elements
* @param diposeSource true
if the source list should be disposed when disposing
* this model, false
otherwise
*/
protected DefaultEventComboBoxModel(EventList source, boolean disposeSource) {
super(source, disposeSource);
}
/**
* Gets the currently selected item.
*/
public Object getSelectedItem() {
return selected;
}
/**
* Sets the currently selected item.
*
* The selection notification process is very much a hack. This fires
* a ListDataEvent where the range is between -1 and -1. This is identical
* to the notification process used by the {@link DefaultComboBoxModel}.
*/
public void setSelectedItem(Object selected) {
// if the selected item isn't actually changing values, avoid the work
if (this.selected == selected)
return;
this.selected = selected;
listDataEvent.setRange(-1, -1);
listDataEvent.setType(ListDataEvent.CONTENTS_CHANGED);
fireListDataEvent(listDataEvent);
}
}