Index: JList.java =================================================================== --- JList.java (révision 928590) +++ JList.java (copie de travail) @@ -387,13 +387,11 @@ } public JList(final Object[] listData) { - this(new DefaultListModel()); - putListData((DefaultListModel)getModel(), listData); + this(new DefaultListModel(listData)); } public JList(final Vector listData) { - this(new DefaultListModel()); - putListData((DefaultListModel)getModel(), listData); + this(new DefaultListModel(listData)); } public JList(final ListModel model) { @@ -447,17 +445,11 @@ public void setListData(final Vector listData) { - DefaultListModel defaultModel = new DefaultListModel(); - putListData(defaultModel, listData); - - setModel(defaultModel); + setModel(new DefaultListModel(listData)); } public void setListData(final Object[] listData) { - DefaultListModel defaultModel = new DefaultListModel(); - putListData(defaultModel, listData); - - setModel(defaultModel); + setModel(new DefaultListModel(listData)); } @@ -1042,23 +1034,7 @@ return result; } - private void putListData(final DefaultListModel model, final Vector listData) { - if (listData != null) { - for (Iterator it = listData.iterator(); it.hasNext(); ) { - model.addElement(it.next()); - } - } - } - private void putListData(final DefaultListModel model, final Object[] listData) { - if (listData != null) { - for (int i = 0; i < listData.length; i++) { - model.addElement(listData[i]); - } - } - } - - private class ListSelectionEventPropagator implements ListSelectionListener { public void valueChanged(final ListSelectionEvent event) { fireSelectionValueChanged(event.getFirstIndex(), event.getLastIndex(), event.getValueIsAdjusting()); Index: DefaultListModel.java =================================================================== --- DefaultListModel.java (révision 928590) +++ DefaultListModel.java (copie de travail) @@ -17,6 +17,7 @@ package javax.swing; +import java.util.Arrays; import java.util.Enumeration; import java.util.Vector; @@ -35,8 +36,20 @@ public class DefaultListModel extends AbstractListModel { private static final long serialVersionUID = 7987079759213724557L; - private Vector internalStorage = new Vector(); + private Vector internalStorage; + public DefaultListModel() { + internalStorage = new Vector(); + } + + DefaultListModel(Object[] listData) { + internalStorage = new Vector(Arrays.asList(listData)); + } + + DefaultListModel(Vector listData) { + internalStorage = new Vector(listData); + } + public void add(int index, Object element) { internalStorage.add(index, element); fireIntervalAdded(this, index, index); @@ -151,9 +164,13 @@ if (fromIndex > toIndex) { throw new IllegalArgumentException(Messages.getString("swing.01")); //$NON-NLS-1$ } - for (int i = 0; i < toIndex - fromIndex + 1; i++) { - internalStorage.remove(fromIndex); + if (fromIndex < 0) { + throw new ArrayIndexOutOfBoundsException(fromIndex); } + if (toIndex >= internalStorage.size()) { + throw new ArrayIndexOutOfBoundsException(toIndex); + } + internalStorage.subList(fromIndex, toIndex+1).clear(); fireIntervalRemoved(this, fromIndex, toIndex); }