<Swing Dev> 6179357: Generics: JList: getSelectedValues

Florian Brunner fbrunnerlist at gmx.ch
Sun Feb 1 21:10:47 UTC 2009


Ok, I'll change this.

Do you like the name of the new method? Or do you have a better one?
getSelectedItems


Is the depraction-comment good or do you have some other conventions? Do you 
have a placeholder for the version number or is 1.7 good?
@deprecated As of JDK 1.7, replaced by {@link #getSelectedItems()}

Is the since-comment in the new method good? Do you have a placeholder for the 
version number or is 1.7 good?
@since 1.7

-Florian

Am Montag, 19. Januar 2009 schrieb Pavel Porvatov:
> Hi Florian,
>
> > So, does  everybody agree?
> >
> > Would be great to also have opinions from someone working at Sun?
> >
> > Pavel, especially your opinion is quite important since you will probably
> > be the one who will have to eventually accept and commit my patch. :-)
>
> I think we are not able to do anything with the getSelectedValues()
> method. So we should introduce the new method and deprecate the old one.
>
> Regards, Pavel.
>
> > -Florian
> >
> > Am Dienstag, 30. Dezember 2008 schrieb Jonathan Giles:
> >> 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





More information about the swing-dev mailing list