OpenJDK / zgc / zgc
changeset 51252:97852c0a7a91
8205144: JSpinner may change the font after became visible
Reviewed-by: psadhukhan
author | serb |
---|---|
date | Sat, 23 Jun 2018 11:48:42 -0700 |
parents | e069b9e49ca7 |
children | 9cf279436b9d |
files | src/java.desktop/share/classes/javax/swing/JSpinner.java test/jdk/javax/swing/JSpinner/6421058/bug6421058.java test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/FontByDefault.java test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/FontSetByLaF.java test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/FontSetByUser.java test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/WrongEditorTextFieldFont.java |
diffstat | 6 files changed, 315 insertions(+), 223 deletions(-) [+] |
line wrap: on
line diff
--- a/src/java.desktop/share/classes/javax/swing/JSpinner.java Fri Jun 22 19:19:43 2018 -0700 +++ b/src/java.desktop/share/classes/javax/swing/JSpinner.java Sat Jun 23 11:48:42 2018 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,8 @@ import java.awt.event.*; import javax.swing.event.*; +import javax.swing.plaf.FontUIResource; +import javax.swing.plaf.UIResource; import javax.swing.text.*; import javax.swing.plaf.SpinnerUI; @@ -743,20 +745,32 @@ Object source = e.getSource(); String name = e.getPropertyName(); - if ((source instanceof JFormattedTextField) && "value".equals(name)) { - Object lastValue = spinner.getValue(); + if (source instanceof JFormattedTextField) { + if ("value".equals(name)) { + Object lastValue = spinner.getValue(); - // Try to set the new value - try { - spinner.setValue(getTextField().getValue()); - } catch (IllegalArgumentException iae) { - // SpinnerModel didn't like new value, reset + // Try to set the new value try { - ((JFormattedTextField)source).setValue(lastValue); - } catch (IllegalArgumentException iae2) { - // Still bogus, nothing else we can do, the - // SpinnerModel and JFormattedTextField are now out - // of sync. + spinner.setValue(getTextField().getValue()); + } catch (IllegalArgumentException iae) { + // SpinnerModel didn't like new value, reset + try { + ((JFormattedTextField)source).setValue(lastValue); + } catch (IllegalArgumentException iae2) { + // Still bogus, nothing else we can do, the + // SpinnerModel and JFormattedTextField are now out + // of sync. + } + } + } else if ("font".equals(name)) { + Object newfont = e.getNewValue(); + if (newfont instanceof UIResource) { + // The text field font must match the JSpinner font if + // the text field font was not set by the user + Font font = spinner.getFont(); + if (!newfont.equals(font)) { + getTextField().setFont(new FontUIResource(font)); + } } } }
--- a/test/jdk/javax/swing/JSpinner/6421058/bug6421058.java Fri Jun 22 19:19:43 2018 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @key headful - * @bug 6421058 - * @summary Verify font of the text field is changed to the font of - * JSpinner if the font of text field was NOT set by the user - * @run main bug6421058 - */ - -import java.awt.Font; -import javax.swing.JFrame; -import javax.swing.JSpinner; -import javax.swing.JSpinner.DefaultEditor; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.plaf.UIResource; -import static javax.swing.UIManager.getInstalledLookAndFeels; - -public class bug6421058 implements Runnable { - - public static void main(final String[] args) throws Exception { - for (final UIManager.LookAndFeelInfo laf : getInstalledLookAndFeels()) { - SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf)); - SwingUtilities.invokeAndWait(new bug6421058()); - } - } - - @Override - public void run() { - final JFrame mainFrame = new JFrame(); - try { - testDefaultFont(mainFrame); - } finally { - mainFrame.dispose(); - } - } - - private static void testDefaultFont(final JFrame frame) { - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - JSpinner spinner = new JSpinner(); - frame.add(spinner); - frame.setSize(300, 100); - frame.setVisible(true); - - final DefaultEditor editor = (DefaultEditor) spinner.getEditor(); - final Font editorFont = editor.getTextField().getFont(); - - /* - * Validate that the font of the text field is changed to the - * font of JSpinner if the font of text field was not set by the - * user. - */ - - if (!(editorFont instanceof UIResource)) { - throw new RuntimeException("Font must be UIResource"); - } - if (!editorFont.equals(spinner.getFont())) { - throw new RuntimeException("Wrong FONT"); - } - } - - private static void setLookAndFeel(final UIManager.LookAndFeelInfo laf) { - try { - UIManager.setLookAndFeel(laf.getClassName()); - } catch (ClassNotFoundException | InstantiationException | - UnsupportedLookAndFeelException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/FontByDefault.java Sat Jun 23 11:48:42 2018 -0700 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @key headful + * @bug 6421058 + * @summary Verify font of the text field is changed to the font of + * JSpinner if the font of text field was NOT set by the user + */ + +import java.awt.Font; +import javax.swing.JFrame; +import javax.swing.JSpinner; +import javax.swing.JSpinner.DefaultEditor; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.UIResource; +import static javax.swing.UIManager.getInstalledLookAndFeels; + +public class FontByDefault implements Runnable { + + public static void main(final String[] args) throws Exception { + for (final UIManager.LookAndFeelInfo laf : getInstalledLookAndFeels()) { + SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf)); + SwingUtilities.invokeAndWait(new FontByDefault()); + } + } + + @Override + public void run() { + final JFrame mainFrame = new JFrame(); + try { + testDefaultFont(mainFrame); + } finally { + mainFrame.dispose(); + } + } + + private static void testDefaultFont(final JFrame frame) { + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + JSpinner spinner = new JSpinner(); + frame.add(spinner); + frame.setSize(300, 100); + frame.setVisible(true); + + final DefaultEditor editor = (DefaultEditor) spinner.getEditor(); + final Font editorFont = editor.getTextField().getFont(); + + /* + * Validate that the font of the text field is changed to the + * font of JSpinner if the font of text field was not set by the + * user. + */ + + if (!(editorFont instanceof UIResource)) { + throw new RuntimeException("Font must be UIResource"); + } + if (!editorFont.equals(spinner.getFont())) { + throw new RuntimeException("Wrong FONT"); + } + } + + private static void setLookAndFeel(final UIManager.LookAndFeelInfo laf) { + try { + UIManager.setLookAndFeel(laf.getClassName()); + } catch (ClassNotFoundException | InstantiationException | + UnsupportedLookAndFeelException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/FontSetByLaF.java Sat Jun 23 11:48:42 2018 -0700 @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.EventQueue; +import java.awt.Font; + +import javax.swing.JFormattedTextField; +import javax.swing.JSpinner; +import javax.swing.JSpinner.DefaultEditor; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +import static javax.swing.UIManager.getInstalledLookAndFeels; + +/** + * @test + * @key headful + * @bug 8205144 + * @summary Verify font of the text field is changed to the font of + * JSpinner if the font of text field was NOT set by the user and look + * and feel tried to set it to default font of the TextUI + */ +public final class FontSetByLaF { + + public static void main(final String[] args) throws Exception { + for (final UIManager.LookAndFeelInfo laf : getInstalledLookAndFeels()) { + EventQueue.invokeAndWait(() -> setLookAndFeel(laf)); + EventQueue.invokeAndWait(() -> { + + JSpinner spinner = new JSpinner(); + DefaultEditor editor = (DefaultEditor) spinner.getEditor(); + JFormattedTextField textField = editor.getTextField(); + + Font before = textField.getFont(); + SwingUtilities.updateComponentTreeUI(spinner); + Font after = textField.getFont(); + + if (!before.equals(after)) { + System.err.println("Before: " + before); + System.err.println("After: " + after); + throw new RuntimeException(); + } + }); + } + } + + private static void setLookAndFeel(final UIManager.LookAndFeelInfo laf) { + try { + UIManager.setLookAndFeel(laf.getClassName()); + System.err.println("LookAndFeel: " + laf.getClassName()); + } catch (final UnsupportedLookAndFeelException ignored) { + System.err.println( + "Unsupported LookAndFeel: " + laf.getClassName()); + } catch (ClassNotFoundException | InstantiationException | + IllegalAccessException e) { + throw new RuntimeException(e); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/FontSetByUser.java Sat Jun 23 11:48:42 2018 -0700 @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.FlowLayout; +import java.awt.Font; + +import javax.swing.JFrame; +import javax.swing.JSpinner; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.plaf.UIResource; + +import static javax.swing.JSpinner.*; +import static javax.swing.UIManager.getInstalledLookAndFeels; + +/** + * @test + * @key headful + * @bug 5036022 + */ +public class FontSetByUser implements Runnable { + + private static final Font USERS_FONT = new Font("dialog", Font.BOLD, 41); + + public static void main(final String[] args) throws Exception { + for (final UIManager.LookAndFeelInfo laf : getInstalledLookAndFeels()) { + SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf)); + SwingUtilities.invokeAndWait(new FontSetByUser()); + } + } + + @Override + public void run() { + final JFrame frame1 = new JFrame(); + try { + testDefaultFont(frame1); + } finally { + frame1.dispose(); + } + } + + private static void testDefaultFont(final JFrame frame) { + final JSpinner spinner = new JSpinner(); + final JSpinner spinner_u = new JSpinner(); + frame.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 50)); + frame.getContentPane().add(spinner); + frame.getContentPane().add(spinner_u); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + final DefaultEditor ed = (DefaultEditor) spinner.getEditor(); + final DefaultEditor ed_u = (DefaultEditor) spinner_u.getEditor(); + ed_u.getTextField().setFont(USERS_FONT); + + for (int i = 5; i < 40; i += 5) { + /* + * Validate that the font of the text field is changed to the + * font of JSpinner if the font of text field was not set by the + * user. + */ + final Font tff = ed.getTextField().getFont(); + if (!(tff instanceof UIResource)) { + throw new RuntimeException("Font must be UIResource"); + } + if (spinner.getFont().getSize() != tff.getSize()) { + throw new RuntimeException("Rrong size"); + } + spinner.setFont(new Font("dialog", Font.BOLD, i)); + /* + * Validate that the font of the text field is NOT changed to the + * font of JSpinner if the font of text field was set by the user. + */ + final Font tff_u = ed_u.getTextField().getFont(); + if (tff_u instanceof UIResource || !tff_u.equals(USERS_FONT)) { + throw new RuntimeException("Font must NOT be UIResource"); + } + if (spinner_u.getFont().getSize() == tff_u.getSize()) { + throw new RuntimeException("Wrong size"); + } + spinner_u.setFont(new Font("dialog", Font.BOLD, i)); + } + } + + private static void setLookAndFeel(final UIManager.LookAndFeelInfo laf) { + try { + UIManager.setLookAndFeel(laf.getClassName()); + System.out.println("LookAndFeel: " + laf.getClassName()); + } catch (ClassNotFoundException | InstantiationException | + UnsupportedLookAndFeelException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } +}
--- a/test/jdk/javax/swing/JSpinner/WrongEditorTextFieldFont/WrongEditorTextFieldFont.java Fri Jun 22 19:19:43 2018 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.awt.FlowLayout; -import java.awt.Font; - -import javax.swing.JFrame; -import javax.swing.JSpinner; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.plaf.UIResource; - -import static javax.swing.JSpinner.*; -import static javax.swing.UIManager.getInstalledLookAndFeels; - -/** - * @test - * @key headful - * @bug 5036022 - * @author Sergey Bylokhov - */ -public class WrongEditorTextFieldFont implements Runnable { - - private static final Font USERS_FONT = new Font("dialog", Font.BOLD, 41); - - public static void main(final String[] args) throws Exception { - for (final UIManager.LookAndFeelInfo laf : getInstalledLookAndFeels()) { - SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf)); - SwingUtilities.invokeAndWait(new WrongEditorTextFieldFont()); - } - } - - @Override - public void run() { - final JFrame frame1 = new JFrame(); - try { - testDefaultFont(frame1); - } finally { - frame1.dispose(); - } - } - - private static void testDefaultFont(final JFrame frame) { - final JSpinner spinner = new JSpinner(); - final JSpinner spinner_u = new JSpinner(); - frame.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 50)); - frame.getContentPane().add(spinner); - frame.getContentPane().add(spinner_u); - frame.pack(); - frame.setLocationRelativeTo(null); - frame.setVisible(true); - final DefaultEditor ed = (DefaultEditor) spinner.getEditor(); - final DefaultEditor ed_u = (DefaultEditor) spinner_u.getEditor(); - ed_u.getTextField().setFont(USERS_FONT); - - for (int i = 5; i < 40; i += 5) { - /* - * Validate that the font of the text field is changed to the - * font of JSpinner if the font of text field was not set by the - * user. - */ - final Font tff = ed.getTextField().getFont(); - if (!(tff instanceof UIResource)) { - throw new RuntimeException("Font must be UIResource"); - } - if (spinner.getFont().getSize() != tff.getSize()) { - throw new RuntimeException("Rrong size"); - } - spinner.setFont(new Font("dialog", Font.BOLD, i)); - /* - * Validate that the font of the text field is NOT changed to the - * font of JSpinner if the font of text field was set by the user. - */ - final Font tff_u = ed_u.getTextField().getFont(); - if (tff_u instanceof UIResource || !tff_u.equals(USERS_FONT)) { - throw new RuntimeException("Font must NOT be UIResource"); - } - if (spinner_u.getFont().getSize() == tff_u.getSize()) { - throw new RuntimeException("Wrong size"); - } - spinner_u.setFont(new Font("dialog", Font.BOLD, i)); - } - } - - private static void setLookAndFeel(final UIManager.LookAndFeelInfo laf) { - try { - UIManager.setLookAndFeel(laf.getClassName()); - System.out.println("LookAndFeel: " + laf.getClassName()); - } catch (ClassNotFoundException | InstantiationException | - UnsupportedLookAndFeelException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } -}