<Swing Dev> [PATCH] 6179357: Generics: JList

Florian Brunner fbrunnerlist at gmx.ch
Wed Dec 9 15:44:43 UTC 2009


Hi Pavel,

Thanks for the info. I started analyzing this issue some days ago (butI 
didn't find time to complete the analysis, yet). Up to now I think, too, 
that it's hard to generify the selected item of a combo box. Still 
hoping we find a way though. :-/ (it was requested by: 
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6303622 )

I can't remember if generifying
ComboBoxModel.get/setSelectedItem(Object)
or generifying
JComboBox.get/setSelectedItem(Object)
or both was a problem. I will check it. (We need to know this for 
generifying JComboBox anyway.)

-Florian

Pavel Porvatov schrieb:
> Hi Florian,
>
> I prepared a fix for bug 6905107 (see 
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6905107) and sent 
> it for a review. So don't spend time on that issue, please
>
> Regards, Pavel
>> Hi Pavel,
>>
>> thanks for pointing this out. I can remember the discussion but not 
>> Alexander Potochkin's solution. I will check it in detail as soon as 
>> I find some time.
>>
>> -Florian
>>
>> Pavel Porvatov schrieb:
>>> Hi Florian,
>>>
>>> I'd like to return to some old discussion:
>>>> In the case of JComboBox I think it's not even possible to define
>>>> something like:
>>>>
>>>>  class JComboBox<E>{
>>>>  ComboBoxModel<? extends E> getModel();
>>>>  setModel(ComboBoxModel<? extends E>);
>>>>  }
>>>>
>>>> because JComboBox internally uses the ComboBoxModel.setSelectedItem
>>>> method.
>>>>
>>>> So the question is what do you think is better:
>>>>
>>>> 1) To look at each component individually and try to make each as
>>>> flexible as possible. So in the JList/ JComboBox case this would mean:
>>>>
>>>>  class JList<E>{
>>>>  ListModel<? extends E> getModel();
>>>>  setModel(ListModel<? extends E>);
>>>>  }
>>>>
>>>> but
>>>>
>>>>  class JComboBox<E>{
>>>>  ComboBoxModel<E> getModel();
>>>>  setModel(ComboBoxModel<E>);
>>>>  }
>>>>
>>>> 2) Make the interfaces as consistent as possible over all components.
>>>> This would mean for the JList case to use somethink like:
>>>>  class JList<E>{
>>>>  ListModel<E> getModel();
>>>>  setModel(ListModel<E>);
>>>>  }
>>>>
>>>> This approach is slightly less flexible than the approach 1), but 
>>>> cases
>>>> where one could benefit from approach 1) are probably rare and 
>>>> there are
>>>> various work-arounds (like: wrapping the model/ use a common base 
>>>> class
>>>> for the generic parameter/ use raw type/... )
>>>>
>>>> So what do you think? Approach 1) or 2)?
>>> As you remember three people voted for the second variant...
>>>
>>> Alexander Potochkin found a third solution that seems better than 
>>> previous ones.
>>> 3)
>>> class JList<E>{
>>> ListModel<? extends E> getModel();
>>> setModel(ListModel<? extends E>);
>>> }
>>>
>>> AND
>>>
>>> class JComboBox<E>{
>>> ComboBoxModel<? extends E> getModel();
>>> setModel(ComboBoxModel<? extends E>);
>>> }
>>>
>>> Below is a quote of his mail, which clarifies possibility of such 
>>> solution:
>>> -------------------------------------------------
>>> I thought a bit more on the generification of the JComobBox and its 
>>> model and now I am pretty sure that we should not generify
>>> ComboBoxModel.get/setSelectedItem(Object)
>>>
>>> The attached test case illustrates the reason
>>>
>>> - Run the test
>>> - Press enter
>>> - The selected item will be printed in the console "1" (integer type)
>>>
>>> - Write "hello" in the editable combobox
>>> - Press enter
>>> - "hello" will be printed (String type)
>>>
>>> As you see it is a valid situation when the type of the selected value
>>> differs from the general type of the JComboBox and its model
>>>
>>> By the way the spec of the JComboBox.getSelectedItem()
>>> underlines this fact:
>>>
>>>     * If the combo box is editable, then this value may not have 
>>> been added
>>>     * to the combo box with <code>addItem</code>, 
>>> <code>insertItemAt</code>
>>>     * or the data constructors.
>>> -------------------------------------------------
>>> So, I think we should make a new change for changing generification 
>>> of JList from ListModel<E> to ListModel<? extends E>. What do you 
>>> think about that?
>>>
>>> Regards, Pavel
>>>> Great news, thanks!
>>>>
>>>> I'll write soon to plan the next steps.
>>>>
>>>> -Florian
>>>>
>>>> Am Montag, 23. November 2009 schrieb Alexander Potochkin:
>>>>  
>>>>> Wow!
>>>>> Congratulations Pavel & Florian!
>>>>>
>>>>> Thanks
>>>>> alexp
>>>>>
>>>>>  
>>>>>> Hi Florian,
>>>>>>
>>>>>> I've got an approve for the fix and committed it:
>>>>>> http://hg.openjdk.java.net/jdk7/swing/jdk/rev/7bcb1864f424
>>>>>>
>>>>>> Thanks for your work,
>>>>>> Pavel
>>>>>>       
>>>
>>
>




More information about the swing-dev mailing list