<Swing Dev> 6303622: Generics: JComboBox: get/setSelectedItem(Object)

Pavel Porvatov Pavel.Porvatov at Sun.COM
Tue Dec 15 16:36:50 UTC 2009


Hi Florian,
> Hi Pavel,
>
> I start here a new thread for the "get/setSelectedItem(Object) methods of JComboBox and 
> ComboBoxModel" discussion.
>
> After further analysis of the code and your sample application I think we can and should generify 
> the get/setSelectedItem(Object) methods of JComboBox and ComboBoxModel.
>
> Yes, the Javadoc says that JComboBox/ ComboBoxModel supports selected values not managed by the 
> underlying list model. But this does not prohibit to optionally limit the type by using generics und 
> thus to increase type safety. 
>
> If you need to allow other types from editor than the ones in the list model, you still can use:
> JComboBox<Object> (or JComboBox, but this is not recommended)
>
> So there should be no backward compatibility problem.
>
> When using a JComboBox, usually you are interested in the selected value and since you want to do 
> something with it you expect it to have some specific type. So if we generify the 
> get/setSelectedItem(Object), you can profit from that in most cases.
>
> Even in cases where you have an initial text in an editable combo box you can profit from that, if 
> you use a "null" value as the selected value, which according to the API is used for "no selection", 
> and a custom editor for rendering that null value. (see attachement; I used your sample application 
> as a base; delete the text to set the selected value to null again).
>   
I agree that generification of the get/setSelectedItem(Object) methods 
will be useful. But than we will have another generification 
disadvantage. I tried to summarize benefits of two solutions below.

*Generified get/setSelectedItem:*
a. Simplified usage read-only comboboxes or non read-only comboboxes 
with special editor

b. Disadvantage: if you use generified editable combobox *without* 
editor then ClassCastException will be thrown in runtime

*Not generified get/setSelectedItem:*
a. A possibility to generify the javax.swing.JComboBox#dataModel as 
ComboBoxModel<? extends E>. It give us more flexible usage of ComboBox:

ComboBoxModel<Integer> cbModel = ....;
JComboBox<Number> cb = new JComboBox<Number>(cbModel);

Note that it's the main benefit that forced us to suggest not generified 
methods

b. To use not read-only combobox with generified model


So I believe that not generified get/setSelectedItem methods give more 
benefits and less disadvantages.
What do you think about that?

Regards, Pavel



More information about the swing-dev mailing list