Java tutorial
/* * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.swing; import java.util.Collection; import java.util.Vector; 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 * @since 1.2 */ @SuppressWarnings("serial") // Superclass is not serializable across versions 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. * * @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 the object to return the index of * @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; } } /** * Adds all of the elements present in the collection. * * @param c the collection which contains the elements to add * @throws NullPointerException if {@code c} is null */ public void addAll(Collection<? extends E> c) { if (c.isEmpty()) { return; } int startIndex = getSize(); objects.addAll(c); fireIntervalAdded(this, startIndex, getSize() - 1); } /** * Adds all of the elements present in the collection, starting * from the specified index. * * @param index index at which to insert the first element from the * specified collection * @param c the collection which contains the elements to add * @throws ArrayIndexOutOfBoundsException if {@code index} does not * fall within the range of number of elements currently held * @throws NullPointerException if {@code c} is null */ public void addAll(int index, Collection<? extends E> c) { if (index < 0 || index > getSize()) { throw new ArrayIndexOutOfBoundsException("index out of range: " + index); } if (c.isEmpty()) { return; } objects.addAll(index, c); fireIntervalAdded(this, index, index + c.size() - 1); } }