<Swing Dev> [11] Review Request: 8205144 JSpinner may change the font after became visible

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Wed Jun 20 23:07:28 UTC 2018

Please review the fix for jdk11.

Bug: https://bugs.openjdk.java.net/browse/JDK-8205144
Webrev: http://cr.openjdk.java.net/~serb/8205144/webrev.00

Our implementation of JSpinner tries to maintain the font which is used 
in the text field inside spinner. There are three cases when the font of 
the text field should be changed to the font of spinner(if the font of 
text field was not set by the user).
  - By default when the spinner is created(fixed in JDK-6421058)
  - When the user change the font of the spinner(fixed in JDK-5036022)

And there is one more case which should be taken into account. It is 
possible that LaF can change the font of text field to the font which is 
used by default by all textfields in this LaF. It is possible to 
reproduce this using:
      * A simple minded look and feel change: ask each node in the tree
      * to <code>updateUI()</code> -- that is, to initialize its UI property
      * with the current look and feel.
     public static void updateComponentTreeUI(Component c)


This method will iterate over hierarchy of the components and call 
updateUI() for each components, then its children, and so on. This is a 
situation when the bug is reproduced. During updateUI() in JSpinner the 
font of internal text field will be set to the font of the spinner, but 
later when the updateUI() will be called for the text field itself the 
font will be set to default font of of all text fields.

The problem is not reproduced if the application do not change the LaF 
on the fly, because in this case we call updateUI() for spinner after 
updateUI() for internal text field.

The fix will reject all fonts(UIResource) which were not set by the 
user, except the font of the spinner.

Best regards, Sergey.

More information about the swing-dev mailing list