< prev index next >

src/java.desktop/share/classes/javax/swing/DefaultListModel.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 2014, 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 --- 1,7 ---- /* ! * Copyright (c) 1997, 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
*** 24,53 **** */ package javax.swing; import java.util.Vector; import java.util.Enumeration; - import javax.swing.event.*; - /** ! * This class loosely implements the <code>java.util.Vector</code> * API, in that it implements the 1.1.x version of ! * <code>java.util.Vector</code>, has no collection class support, ! * and notifies the <code>ListDataListener</code>s when changes occur. ! * Presently it delegates to a <code>Vector</code>, * in a future release it will be a real Collection implementation. * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans&trade; ! * has been added to the <code>java.beans</code> package. * Please see {@link java.beans.XMLEncoder}. * * @param <E> the type of the elements of this model * * @author Hans Muller --- 24,52 ---- */ package javax.swing; import java.util.Vector; + import java.util.Collection; import java.util.Enumeration; /** ! * This class loosely implements the {@code java.util.Vector} * API, in that it implements the 1.1.x version of ! * {@code java.util.Vector}, has no collection class support, ! * and notifies the {@code ListDataListener}s when changes occur. ! * Presently it delegates to a {@code Vector}, * in a future release it will be a real Collection implementation. * <p> * <strong>Warning:</strong> * Serialized objects of this class will not be compatible with * future Swing releases. The current serialization support is * appropriate for short term storage or RMI between applications running * the same version of Swing. As of 1.4, support for long term storage * of all JavaBeans&trade; ! * has been added to the {@code java.beans} package. * Please see {@link java.beans.XMLEncoder}. * * @param <E> the type of the elements of this model * * @author Hans Muller
*** 59,72 **** private Vector<E> delegate = new Vector<E>(); /** * Returns the number of components in this list. * <p> ! * This method is identical to <code>size</code>, which implements the ! * <code>List</code> interface defined in the 1.2 Collections framework. ! * This method exists in conjunction with <code>setSize</code> so that ! * <code>size</code> is identifiable as a JavaBean property. * * @return the number of components in this list * @see #size() */ public int getSize() { --- 58,71 ---- private Vector<E> delegate = new Vector<E>(); /** * Returns the number of components in this list. * <p> ! * This method is identical to {@code size}, which implements the ! * {@code List} interface defined in the 1.2 Collections framework. ! * This method exists in conjunction with {@code setSize} so that ! * {@code size} is identifiable as a JavaBean property. * * @return the number of components in this list * @see #size() */ public int getSize() {
*** 75,90 **** /** * Returns the component at the specified index. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is <code>get(int)</code>, which implements the ! * <code>List</code> interface defined in the 1.2 Collections framework. * </blockquote> * @param index an index into this list * @return the component at the specified index ! * @exception ArrayIndexOutOfBoundsException if the <code>index</code> * is negative or greater than the current size of this * list * @see #get(int) */ public E getElementAt(int index) { --- 74,89 ---- /** * Returns the component at the specified index. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is {@code get(int)}, which implements the {@code List} ! * interface defined in the 1.2 Collections framework. * </blockquote> * @param index an index into this list * @return the component at the specified index ! * @throws ArrayIndexOutOfBoundsException if the {@code index} * is negative or greater than the current size of this * list * @see #get(int) */ public E getElementAt(int index) {
*** 92,102 **** } /** * Copies the components of this list into the specified array. * The array must be big enough to hold all the objects in this list, ! * else an <code>IndexOutOfBoundsException</code> is thrown. * * @param anArray the array into which the components get copied * @see Vector#copyInto(Object[]) */ public void copyInto(Object anArray[]) { --- 91,101 ---- } /** * Copies the components of this list into the specified array. * The array must be big enough to hold all the objects in this list, ! * else an {@code IndexOutOfBoundsException} is thrown. * * @param anArray the array into which the components get copied * @see Vector#copyInto(Object[]) */ public void copyInto(Object anArray[]) {
*** 162,174 **** } /** * Tests whether this list has any components. * ! * @return <code>true</code> if and only if this list has * no components, that is, its size is zero; ! * <code>false</code> otherwise * @see Vector#isEmpty() */ public boolean isEmpty() { return delegate.isEmpty(); } --- 161,173 ---- } /** * Tests whether this list has any components. * ! * @return {@code true} if and only if this list has * no components, that is, its size is zero; ! * {@code false} otherwise * @see Vector#isEmpty() */ public boolean isEmpty() { return delegate.isEmpty(); }
*** 185,351 **** /** * Tests whether the specified object is a component in this list. * * @param elem an object ! * @return <code>true</code> if the specified object * is the same as a component in this list * @see Vector#contains(Object) */ public boolean contains(Object elem) { return delegate.contains(elem); } /** ! * Searches for the first occurrence of <code>elem</code>. * * @param elem an object * @return the index of the first occurrence of the argument in this ! * list; returns <code>-1</code> if the object is not found * @see Vector#indexOf(Object) */ public int indexOf(Object elem) { return delegate.indexOf(elem); } /** ! * Searches for the first occurrence of <code>elem</code>, beginning ! * the search at <code>index</code>. * ! * @param elem an desired component * @param index the index from which to begin searching ! * @return the index where the first occurrence of <code>elem</code> ! * is found after <code>index</code>; returns <code>-1</code> ! * if the <code>elem</code> is not found in the list * @see Vector#indexOf(Object,int) */ public int indexOf(Object elem, int index) { return delegate.indexOf(elem, index); } /** ! * Returns the index of the last occurrence of <code>elem</code>. * * @param elem the desired component ! * @return the index of the last occurrence of <code>elem</code> ! * in the list; returns <code>-1</code> if the object is not found * @see Vector#lastIndexOf(Object) */ public int lastIndexOf(Object elem) { return delegate.lastIndexOf(elem); } /** ! * Searches backwards for <code>elem</code>, starting from the * specified index, and returns an index to it. * * @param elem the desired component * @param index the index to start searching from ! * @return the index of the last occurrence of the <code>elem</code> ! * in this list at position less than <code>index</code>; ! * returns <code>-1</code> if the object is not found * @see Vector#lastIndexOf(Object,int) */ public int lastIndexOf(Object elem, int index) { return delegate.lastIndexOf(elem, index); } /** * Returns the component at the specified index. - * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index - * is negative or not less than the size of the list. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is <code>get(int)</code>, which implements the ! * <code>List</code> interface defined in the 1.2 Collections framework. * </blockquote> * * @param index an index into this list * @return the component at the specified index * @see #get(int) * @see Vector#elementAt(int) */ public E elementAt(int index) { return delegate.elementAt(index); } /** * Returns the first component of this list. - * Throws a <code>NoSuchElementException</code> if this - * vector has no components. * @return the first component of this list * @see Vector#firstElement() */ public E firstElement() { return delegate.firstElement(); } /** * Returns the last component of the list. - * Throws a <code>NoSuchElementException</code> if this vector - * has no components. * * @return the last component of the list * @see Vector#lastElement() */ public E lastElement() { return delegate.lastElement(); } /** ! * Sets the component at the specified <code>index</code> of this * list to be the specified element. The previous component at that * position is discarded. - * <p> - * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index - * is invalid. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is <code>set(int,Object)</code>, which implements the ! * <code>List</code> interface defined in the 1.2 Collections framework. * </blockquote> * * @param element what the component is to be set to * @param index the specified index * @see #set(int,Object) * @see Vector#setElementAt(Object,int) */ public void setElementAt(E element, int index) { delegate.setElementAt(element, index); fireContentsChanged(this, index, index); } /** * Deletes the component at the specified index. - * <p> - * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index - * is invalid. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is <code>remove(int)</code>, which implements the ! * <code>List</code> interface defined in the 1.2 Collections framework. * </blockquote> * * @param index the index of the object to remove * @see #remove(int) * @see Vector#removeElementAt(int) */ public void removeElementAt(int index) { delegate.removeElementAt(index); fireIntervalRemoved(this, index, index); } /** * Inserts the specified element as a component in this list at the * specified <code>index</code>. - * <p> - * Throws an <code>ArrayIndexOutOfBoundsException</code> if the index - * is invalid. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is <code>add(int,Object)</code>, which implements the ! * <code>List</code> interface defined in the 1.2 Collections framework. * </blockquote> * * @param element the component to insert * @param index where to insert the new component * @exception ArrayIndexOutOfBoundsException if the index was invalid --- 184,343 ---- /** * Tests whether the specified object is a component in this list. * * @param elem an object ! * @return {@code true} if the specified object * is the same as a component in this list * @see Vector#contains(Object) */ public boolean contains(Object elem) { return delegate.contains(elem); } /** ! * Searches for the first occurrence of {@code elem}. * * @param elem an object * @return the index of the first occurrence of the argument in this ! * list; returns {@code -1} if the object is not found * @see Vector#indexOf(Object) */ public int indexOf(Object elem) { return delegate.indexOf(elem); } /** ! * Searches for the first occurrence of {@code elem}, beginning ! * the search at {@code index}. * ! * @param elem the desired component * @param index the index from which to begin searching ! * @return the index where the first occurrence of {@code elem} ! * is found after {@code index}; returns {@code -1} ! * if the {@code elem} is not found in the list * @see Vector#indexOf(Object,int) */ public int indexOf(Object elem, int index) { return delegate.indexOf(elem, index); } /** ! * Returns the index of the last occurrence of {@code elem}. * * @param elem the desired component ! * @return the index of the last occurrence of {@code elem} ! * in the list; returns {@code elem} if the object is not found * @see Vector#lastIndexOf(Object) */ public int lastIndexOf(Object elem) { return delegate.lastIndexOf(elem); } /** ! * Searches backwards for {@code elem}, starting from the * specified index, and returns an index to it. * * @param elem the desired component * @param index the index to start searching from ! * @return the index of the last occurrence of the {@code elem} ! * in this list at position less than {@code index}; ! * returns {@code -1} if the object is not found * @see Vector#lastIndexOf(Object,int) */ public int lastIndexOf(Object elem, int index) { return delegate.lastIndexOf(elem, index); } /** * Returns the component at the specified index. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is {@code get(int)}, which implements the ! * {@code List} interface defined in the 1.2 Collections framework. * </blockquote> * * @param index an index into this list * @return the component at the specified index + * @throws ArrayIndexOutOfBoundsException if the index + * is negative or not less than the size of the list * @see #get(int) * @see Vector#elementAt(int) */ public E elementAt(int index) { return delegate.elementAt(index); } /** * Returns the first component of this list. * @return the first component of this list * @see Vector#firstElement() + * @throws NoSuchElementException if this + * vector has no components */ public E firstElement() { return delegate.firstElement(); } /** * Returns the last component of the list. * * @return the last component of the list * @see Vector#lastElement() + * @throws NoSuchElementException if this vector + * has no components */ public E lastElement() { return delegate.lastElement(); } /** ! * Sets the component at the specified {@code index} of this * list to be the specified element. The previous component at that * position is discarded. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is {@code set(int,Object)}, which implements the ! * {@code List} interface defined in the 1.2 Collections framework. * </blockquote> * * @param element what the component is to be set to * @param index the specified index + * @throws ArrayIndexOutOfBoundsException if the index is invalid * @see #set(int,Object) * @see Vector#setElementAt(Object,int) */ public void setElementAt(E element, int index) { delegate.setElementAt(element, index); fireContentsChanged(this, index, index); } /** * Deletes the component at the specified index. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is {@code remove(int)}, which implements the ! * {@code List} interface defined in the 1.2 Collections framework. * </blockquote> * * @param index the index of the object to remove * @see #remove(int) * @see Vector#removeElementAt(int) + * @throws ArrayIndexOutOfBoundsException if the index is invalid */ public void removeElementAt(int index) { delegate.removeElementAt(index); fireIntervalRemoved(this, index, index); } /** * Inserts the specified element as a component in this list at the * specified <code>index</code>. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is {@code add(int,Object)}, which implements the ! * {@code List} interface defined in the 1.2 Collections framework. * </blockquote> * * @param element the component to insert * @param index where to insert the new component * @exception ArrayIndexOutOfBoundsException if the index was invalid
*** 372,383 **** /** * Removes the first (lowest-indexed) occurrence of the argument * from this list. * * @param obj the component to be removed ! * @return <code>true</code> if the argument was a component of this ! * list; <code>false</code> otherwise * @see Vector#removeElement(Object) */ public boolean removeElement(Object obj) { int index = indexOf(obj); boolean rv = delegate.removeElement(obj); --- 364,375 ---- /** * Removes the first (lowest-indexed) occurrence of the argument * from this list. * * @param obj the component to be removed ! * @return {@code true} if the argument was a component of this ! * list; {@code false} otherwise * @see Vector#removeElement(Object) */ public boolean removeElement(Object obj) { int index = indexOf(obj); boolean rv = delegate.removeElement(obj);
*** 390,401 **** /** * Removes all components from this list and sets its size to zero. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is <code>clear</code>, which implements the ! * <code>List</code> interface defined in the 1.2 Collections framework. * </blockquote> * * @see #clear() * @see Vector#removeAllElements() */ --- 382,393 ---- /** * Removes all components from this list and sets its size to zero. * <blockquote> * <b>Note:</b> Although this method is not deprecated, the preferred ! * method to use is {@code clear}, which implements the ! * {@code List} interface defined in the 1.2 Collections framework. * </blockquote> * * @see #clear() * @see Vector#removeAllElements() */
*** 436,501 **** return rv; } /** * Returns the element at the specified position in this list. - * <p> - * Throws an <code>ArrayIndexOutOfBoundsException</code> - * if the index is out of range - * (<code>index &lt; 0 || index &gt;= size()</code>). * * @param index index of element to return * @return the element at the specified position in this list */ public E get(int index) { return delegate.elementAt(index); } /** * Replaces the element at the specified position in this list with the * specified element. - * <p> - * Throws an <code>ArrayIndexOutOfBoundsException</code> - * if the index is out of range - * (<code>index &lt; 0 || index &gt;= size()</code>). * * @param index index of element to replace * @param element element to be stored at the specified position * @return the element previously at the specified position */ public E set(int index, E element) { E rv = delegate.elementAt(index); delegate.setElementAt(element, index); fireContentsChanged(this, index, index); return rv; } /** * Inserts the specified element at the specified position in this list. - * <p> - * Throws an <code>ArrayIndexOutOfBoundsException</code> if the - * index is out of range - * (<code>index &lt; 0 || index &gt; size()</code>). * * @param index index at which the specified element is to be inserted * @param element element to be inserted */ public void add(int index, E element) { delegate.insertElementAt(element, index); fireIntervalAdded(this, index, index); } /** * Removes the element at the specified position in this list. ! * Returns the element that was removed from the list. ! * <p> ! * Throws an <code>ArrayIndexOutOfBoundsException</code> ! * if the index is out of range ! * (<code>index &lt; 0 || index &gt;= size()</code>). * * @param index the index of the element to removed * @return the element previously at the specified position */ public E remove(int index) { E rv = delegate.elementAt(index); delegate.removeElementAt(index); fireIntervalRemoved(this, index, index); --- 428,485 ---- return rv; } /** * Returns the element at the specified position in this list. * * @param index index of element to return * @return the element at the specified position in this list + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index &lt; 0 || index &gt;= size()}) */ public E get(int index) { return delegate.elementAt(index); } /** * Replaces the element at the specified position in this list with the * specified element. * * @param index index of element to replace * @param element element to be stored at the specified position * @return the element previously at the specified position + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index &lt; 0 || index &gt;= size()}) */ public E set(int index, E element) { E rv = delegate.elementAt(index); delegate.setElementAt(element, index); fireContentsChanged(this, index, index); return rv; } /** * Inserts the specified element at the specified position in this list. * * @param index index at which the specified element is to be inserted * @param element element to be inserted + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index &lt; 0 || index &gt; size()}) */ public void add(int index, E element) { delegate.insertElementAt(element, index); fireIntervalAdded(this, index, index); } /** * Removes the element at the specified position in this list. ! * Returns the element that was removed from the list * * @param index the index of the element to removed * @return the element previously at the specified position + * @throws ArrayIndexOutOfBoundsException if the index is out of range + * ({@code index &lt; 0 || index &gt;= size()}) */ public E remove(int index) { E rv = delegate.elementAt(index); delegate.removeElementAt(index); fireIntervalRemoved(this, index, index);
*** 517,534 **** /** * Deletes the components at the specified range of indexes. * The removal is inclusive, so specifying a range of (1,5) * removes the component at index 1 and the component at index 5, * as well as all components in between. - * <p> - * Throws an <code>ArrayIndexOutOfBoundsException</code> - * if the index was invalid. - * Throws an <code>IllegalArgumentException</code> if - * <code>fromIndex &gt; toIndex</code>. * * @param fromIndex the index of the lower end of the range * @param toIndex the index of the upper end of the range * @see #remove(int) */ public void removeRange(int fromIndex, int toIndex) { if (fromIndex > toIndex) { throw new IllegalArgumentException("fromIndex must be <= toIndex"); --- 501,515 ---- /** * Deletes the components at the specified range of indexes. * The removal is inclusive, so specifying a range of (1,5) * removes the component at index 1 and the component at index 5, * as well as all components in between. * * @param fromIndex the index of the lower end of the range * @param toIndex the index of the upper end of the range + * @throws ArrayIndexOutOfBoundsException if the index was invalid + * @throws IllegalArgumentException if {@code fromIndex &gt; toIndex} * @see #remove(int) */ public void removeRange(int fromIndex, int toIndex) { if (fromIndex > toIndex) { throw new IllegalArgumentException("fromIndex must be <= toIndex");
*** 537,549 **** delegate.removeElementAt(i); } fireIntervalRemoved(this, fromIndex, toIndex); } ! /* ! public void addAll(Collection c) { } ! public void addAll(int index, Collection c) { } */ } --- 518,564 ---- delegate.removeElementAt(i); } fireIntervalRemoved(this, fromIndex, toIndex); } ! /** ! * Adds all of the elements present in the collection to the list. ! * ! * @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(); ! ! delegate.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; + } + + delegate.addAll(index, c); + fireIntervalAdded(this, index, index + c.size() - 1); + } }
< prev index next >