<Swing Dev> 6179357: Generics: JList: getSelectedValues
Jonathan Giles
jo at jogiles.co.nz
Tue Dec 30 20:59:09 UTC 2008
Florian,
Your proposed solution of deprecating the old method and referring to
the new method seems like a good idea to me.
Cheers,
Jonathan Giles
Florian Brunner wrote:
>
> 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/20081231/f85dd74c/attachment.html>
More information about the swing-dev
mailing list