<Swing Dev> 6179357: Generics: JList: getSelectedValues
    Florian Brunner 
    fbrunnerlist at gmx.ch
       
    Tue Dec 30 20:55:14 UTC 2008
    
    
  
Hi,
I hope you all had a Merry Christmas! I started now to add generics to ListModel and JList. While adding generics to the ListModel is quite straightforward, I think, there 
are some issues with JList, I would like to dicuss. I start here with the first issue: getSelectedValues
Am I right, that there is no way to change the signature of this method to:
public E[] getSelectedValues()
where E is the type parameter of the class?
(Because of generic array creation, which is not supported by Java.)
Here is the current implementation:
public Object[] getSelectedValues() {
        ListSelectionModel sm = getSelectionModel();
        ListModel dm = getModel();
        int iMin = sm.getMinSelectionIndex();
        int iMax = sm.getMaxSelectionIndex();
        if ((iMin < 0) || (iMax < 0)) {
            return new Object[0];
        }
        Object[] rvTmp = new Object[1+ (iMax - iMin)];
        int n = 0;
        for(int i = iMin; i <= iMax; i++) {
            if (sm.isSelectedIndex(i)) {
                rvTmp[n++] = dm.getElementAt(i);
            }
        }
        Object[] rv = new Object[n];
        System.arraycopy(rvTmp, 0, rv, 0, n);
        return rv;
    }
If this is not possible I propose to add a new method:
public List<E> getSelectedItems()
and deprecate getSelectedValues:
...
     * @deprecated As of JDK 1.7, replaced by {@link #getSelectedItems()}
     */
    @Deprecated
    public Object[] getSelectedValues() {
...
}
 /**
     * Returns a list of all the selected items, in increasing order based
     * on their indices in the list.
     *
     * @return the selected items, or an empty list if nothing is selected
     * @see #isSelectedIndex
     * @see #getModel
     * @see #addListSelectionListener
     * 
     * @since 1.7
     */
    public List<E> getSelectedItems() {
        ListSelectionModel sm = getSelectionModel();
        ListModel<? extends E> dm = getModel();
        int iMin = sm.getMinSelectionIndex();
        int iMax = sm.getMaxSelectionIndex();
        if ((iMin < 0) || (iMax < 0)) {
            return Collections.emptyList();
        }
        List<E> selectedItems = new ArrayList<E>();
        for(int i = iMin; i <= iMax; i++) {
            if (sm.isSelectedIndex(i)) {
                selectedItems.add(dm.getElementAt(i));
            }
        }
        return selectedItems;
    }
Note: Ignore for now 'E' vs '? extends E', I will start another thread for this. I'm just interested if you think it's a good idea to add the getSelectedItems method and to 
deprecate getSelectedValues.
So I wish you a Happy New Year and hope to hear from you soon.
-Florian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20081230/42ef0817/attachment.html>
    
    
More information about the swing-dev
mailing list