/* * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package javax.swing; import java.util.*; import java.io.Serializable; /** * The default model for combo boxes. * * @param <E> the type of the elements of this model * * @author Arnaud Weber * @author Tom Santos */ public class DefaultComboBoxModel<E> extends AbstractListModel<E> implements MutableComboBoxModel<E>, Serializable { Vector<E> objects; Object selectedObject; /** * Constructs an empty DefaultComboBoxModel object. */ public DefaultComboBoxModel() { objects = new Vector<E>(); } /** * Constructs a DefaultComboBoxModel object initialized with * an array of objects. * * @param items an array of Object objects */ public DefaultComboBoxModel(final E items[]) { objects = new Vector<E>(items.length); int i,c; for ( i=0,c=items.length;i<c;i++ ) objects.addElement(items[i]); if ( getSize() > 0 ) { selectedObject = getElementAt( 0 ); } } /** * Constructs a DefaultComboBoxModel object initialized with * a vector. * * @param v a Vector object ... */ public DefaultComboBoxModel(Vector<E> v) { objects = v; if ( getSize() > 0 ) { selectedObject = getElementAt( 0 ); } } // implements javax.swing.ComboBoxModel /** * Set the value of the selected item. The selected item may be null. * <p> * @param anObject The combo box value or null for no selection. */ public void setSelectedItem(Object anObject) { if ((selectedObject != null && !selectedObject.equals( anObject )) || selectedObject == null && anObject != null) { selectedObject = anObject; fireContentsChanged(this, -1, -1); } } // implements javax.swing.ComboBoxModel public Object getSelectedItem() { return selectedObject; } // implements javax.swing.ListModel public int getSize() { return objects.size(); } // implements javax.swing.ListModel public E getElementAt(int index) { if ( index >= 0 && index < objects.size() ) return objects.elementAt(index); else return null; } /** * Returns the index-position of the specified object in the list. * * @param anObject * @return an int representing the index position, where 0 is * the first position */ public int getIndexOf(Object anObject) { return objects.indexOf(anObject); } // implements javax.swing.MutableComboBoxModel public void addElement(E anObject) { objects.addElement(anObject); fireIntervalAdded(this,objects.size()-1, objects.size()-1); if ( objects.size() == 1 && selectedObject == null && anObject != null ) { setSelectedItem( anObject ); } } // implements javax.swing.MutableComboBoxModel public void insertElementAt(E anObject,int index) { objects.insertElementAt(anObject,index); fireIntervalAdded(this, index, index); } // implements javax.swing.MutableComboBoxModel public void removeElementAt(int index) { if ( getElementAt( index ) == selectedObject ) { if ( index == 0 ) { setSelectedItem( getSize() == 1 ? null : getElementAt( index + 1 ) ); } else { setSelectedItem( getElementAt( index - 1 ) ); } } objects.removeElementAt(index); fireIntervalRemoved(this, index, index); } // implements javax.swing.MutableComboBoxModel public void removeElement(Object anObject) { int index = objects.indexOf(anObject); if ( index != -1 ) { removeElementAt(index); } } /** * Empties the list. */ public void removeAllElements() { if ( objects.size() > 0 ) { int firstIndex = 0; int lastIndex = objects.size() - 1; objects.removeAllElements(); selectedObject = null; fireIntervalRemoved(this, firstIndex, lastIndex); } else { selectedObject = null; } } }