<Swing Dev> [PATCH] 100153: Generics: JComboBox

Pavel Porvatov pavel.porvatov at oracle.com
Tue Nov 23 10:58:15 UTC 2010


Hi Florian,

I have several comment about your patch:
1. Run an attached test, enter some text (e.g. "aa") and press enter. 
The text disappears, but if you reenter text it stays.

2. The following changes in the 
javax.swing.plaf.basic.BasicComboBoxEditor#getItem() looks strange for 
me, could you describe them please?
+        if (oldValue instanceof String) {
+            return (E) newValue;
+        } else {...

BTW: The code "Method method = cls.getMethod("valueOf", new 
Class[]{String.class});" and other stuff like that were added with the 
fix of CR 4239610 
(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4239610). That code 
looks strange for me, I believe the check 
"newValue.equals(oldValue.toString())" is enough for that bug...  
Moreover the "valueof" method cannot be used as a universal solution for 
String->AnyClass conversion because of that's impossible to use in case 
oldValue is null.

Therefore I think we should not change the WindowsComboBoxUI.java, 
ComboBoxEditor.java, BasicComboBoxEditor.java and 
MetalComboBoxEditor.java files at all, because there are no available 
API for converting string into *any* class. What do you think about 
that? Logically it means that editor can edit only strings but not any 
class.

3. After item 2 we will see that it's not possible to generify the 
set/getSelectedItem methods in the javax.swing.ComboBoxModel interface 
because of some code in the javax.swing.JComboBox#actionPerformed 
method. The same set/getSelectedItem methods in the JComboBox class 
shouldn't be generified as well. That's also correspondent to my old 
proposal:
http://mail.openjdk.java.net/pipermail/swing-dev/2009-December/000878.html

4. As the result of item 3 we can generify 
javax.swing.JComboBox#dataModel like this:
protected ComboBoxModel<? extends E>    dataModel;

I remember our discussion about JList model generification:
http://mail.openjdk.java.net/pipermail/swing-dev/2009-March/000443.html

So we can improve JList generification as well (it's possible to do 
without backward incompatibility because of JList generification is a 
jdk7 feature)

5. Some regression tests are needed (like this one 
http://hg.openjdk.java.net/jdk7/swing/jdk/file/7bcb1864f424/test/javax/swing/JList/6823603/bug6823603.java). 
We should write them after generification will be fully discussed and 
coordinated.

I attached a raw patch that contains all changes that I described above. 
What do you think about this way of generification?

Regards, Pavel

> Hi Pavel,
>
> here is a patch to "generify" JComboBox along with: ComboBoxEditor, ComboBoxModel,
> DefaultComboBoxModel and MutableComboBoxModel.
>
> I fixed the BasicComboBoxEditor as I proposed in my last post.
>
> MutableComboBoxModel.removeElement is not generified currently and thus still takes an Object as argument. This is consistent with the Collection Framework (eg. java.util.List.remove). Please tell me if you prefer this method to take a generic parameter as well.
>
>
> I also created a new issue in the OpenJDK Bugzilla system:
> https://bugs.openjdk.java.net/show_bug.cgi?id=100153
>
> Regards,
> Florian
>   

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Test.java
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20101123/ca19e39f/Test.java>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jdk7.patch
Type: text/x-patch
Size: 15188 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20101123/ca19e39f/jdk7.patch>


More information about the swing-dev mailing list