diff -r 3c68768d3904 -r 5daa8ef17089 src/java.desktop/share/classes/javax/swing/JList.java --- a/src/java.desktop/share/classes/javax/swing/JList.java Thu Mar 29 12:03:40 2018 +0530 +++ b/src/java.desktop/share/classes/javax/swing/JList.java Thu Mar 29 17:52:32 2018 +0530 @@ -2180,24 +2180,7 @@ */ @Transient public int[] getSelectedIndices() { - ListSelectionModel sm = getSelectionModel(); - int iMin = sm.getMinSelectionIndex(); - int iMax = sm.getMaxSelectionIndex(); - - if ((iMin < 0) || (iMax < 0)) { - return new int[0]; - } - - int[] rvTmp = new int[1+ (iMax - iMin)]; - int n = 0; - for(int i = iMin; i <= iMax; i++) { - if (sm.isSelectedIndex(i)) { - rvTmp[n++] = i; - } - } - int[] rv = new int[n]; - System.arraycopy(rvTmp, 0, rv, 0, n); - return rv; + return getSelectionModel().getSelectedIndices(); } @@ -2301,25 +2284,23 @@ */ @BeanProperty(bound = false) public List getSelectedValuesList() { - ListSelectionModel sm = getSelectionModel(); ListModel dm = getModel(); - - int iMin = sm.getMinSelectionIndex(); - int iMax = sm.getMaxSelectionIndex(); - int size = dm.getSize(); - - if ((iMin < 0) || (iMax < 0) || (iMin >= size)) { - return Collections.emptyList(); - } - iMax = iMax < size ? iMax : size - 1; - - List selectedItems = new ArrayList(); - for(int i = iMin; i <= iMax; i++) { - if (sm.isSelectedIndex(i)) { + int[] selectedIndices = getSelectedIndices(); + + if (selectedIndices.length > 0) { + int size = dm.getSize(); + if (selectedIndices[0] >= size) { + return Collections.emptyList(); + } + List selectedItems = new ArrayList(); + for (int i : selectedIndices) { + if (i >= size) + break; selectedItems.add(dm.getElementAt(i)); } + return selectedItems; } - return selectedItems; + return Collections.emptyList(); }