From 0201cf66be9aea829e479cea7141aad6aaa2cf31 Mon Sep 17 00:00:00 2001 From: Satyen Subramaniam Date: Tue, 4 Nov 2025 19:53:00 +0000 Subject: [PATCH] Backport f955a8cbd2d1233af7f7e4b4e4bfcdbb5a8cacae --- .../swing/JInternalFrame/bug4190516.java | 75 +++++++++++ .../swing/JInternalFrame/bug4242045.java | 123 ++++++++++++++++++ .../javax/swing/JTextField/bug4232716.java | 81 ++++++++++++ .../javax/swing/JTextField/bug5027332.java | 70 ++++++++++ 4 files changed, 349 insertions(+) create mode 100644 test/jdk/javax/swing/JInternalFrame/bug4190516.java create mode 100644 test/jdk/javax/swing/JInternalFrame/bug4242045.java create mode 100644 test/jdk/javax/swing/JTextField/bug4232716.java create mode 100644 test/jdk/javax/swing/JTextField/bug5027332.java diff --git a/test/jdk/javax/swing/JInternalFrame/bug4190516.java b/test/jdk/javax/swing/JInternalFrame/bug4190516.java new file mode 100644 index 00000000000..e9a44e4b0c6 --- /dev/null +++ b/test/jdk/javax/swing/JInternalFrame/bug4190516.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2000, 2025, 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 + * @bug 4190516 + * @summary JInternalFrame should be maximized when Desktop resized + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @run main/manual bug4190516 + */ + +import javax.swing.JDesktopPane; +import javax.swing.JFrame; +import javax.swing.JInternalFrame; +import javax.swing.SwingUtilities; + +public class bug4190516 { + + private static final String INSTRUCTIONS = """ + Try to resize frame "bug4190516 Frame". + If the internal frame remains maximized + inside this frame then test passes, else test fails."""; + + public static void main(String[] args) throws Exception { + PassFailJFrame.builder() + .title("bug4190516 Instructions") + .instructions(INSTRUCTIONS) + .columns(25) + .testUI(bug4190516::createTestUI) + .build() + .awaitAndCheck(); + } + + private static JFrame createTestUI() { + JFrame fr = new JFrame("bug4190516 Frame"); + JDesktopPane jdp = new JDesktopPane(); + fr.getContentPane().add(jdp); + + JInternalFrame jif = new JInternalFrame("Title", true, true, true, true); + jdp.add(jif); + jif.setSize(150, 150); + jif.setVisible(true); + + fr.setSize(300, 200); + try { + jif.setMaximum(true); + } catch (Exception e) { + throw new RuntimeException(e); + } + + SwingUtilities.updateComponentTreeUI(fr); + return fr; + } +} diff --git a/test/jdk/javax/swing/JInternalFrame/bug4242045.java b/test/jdk/javax/swing/JInternalFrame/bug4242045.java new file mode 100644 index 00000000000..5f812da1da5 --- /dev/null +++ b/test/jdk/javax/swing/JInternalFrame/bug4242045.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2000, 2025, 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 + * @bug 4242045 + * @requires (os.family == "windows") + * @summary JInternalFrame titlepane icons should be restored after attribute change + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @run main/manual bug4242045 + */ + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; + +import javax.swing.JButton; +import javax.swing.JDesktopPane; +import javax.swing.JFrame; +import javax.swing.JInternalFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +public class bug4242045 { + + private static JFrame frame; + + private static final String INSTRUCTIONS = """ + Add and remove iconify/maximize/close buttons using the buttons + "Iconifiable", "Maximizable", "Closable" under different LookAndFeels. + If they appears and disappears correctly then test passes. If any + button does not appear or disappear as expected or appear with incorrect + placement then test fails."""; + + public static void main(String[] args) throws Exception { + PassFailJFrame.builder() + .title("bug4242045 Instructions") + .instructions(INSTRUCTIONS) + .columns(35) + .testUI(bug4242045::createTestUI) + .build() + .awaitAndCheck(); + } + + private static void setLF(ActionEvent e) { + try { + UIManager.setLookAndFeel(((JButton)e.getSource()).getActionCommand()); + SwingUtilities.updateComponentTreeUI(frame); + } catch (ClassNotFoundException | InstantiationException + | UnsupportedLookAndFeelException + | IllegalAccessException ex) { + throw new RuntimeException(ex); + } + } + + private static JFrame createTestUI() { + + frame = new JFrame("bug4242045"); + JDesktopPane jdp = new JDesktopPane(); + JInternalFrame jif = new JInternalFrame("Test", true); + frame.add(jdp); + + jdp.add(jif); + jif.setSize(150, 150); + jif.setVisible(true); + + JPanel p = new JPanel(); + + JButton metal = new JButton("Metal"); + metal.setActionCommand("javax.swing.plaf.metal.MetalLookAndFeel"); + metal.addActionListener((ActionEvent e) -> setLF(e)); + p.add(metal); + + JButton windows = new JButton("Windows"); + windows.setActionCommand("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); + windows.addActionListener((ActionEvent e) -> setLF(e)); + p.add(windows); + + JButton motif = new JButton("Motif"); + motif.setActionCommand("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); + motif.addActionListener((ActionEvent e) -> setLF(e)); + p.add(motif); + + JButton clo = new JButton("Closable"); + clo.addActionListener(e -> jif.setClosable(!jif.isClosable())); + p.add(clo); + + JButton ico = new JButton("Iconifiable"); + ico.addActionListener(e -> jif.setIconifiable(!jif.isIconifiable())); + p.add(ico); + + JButton max = new JButton("Maximizable"); + max.addActionListener(e -> jif.setMaximizable(!jif.isMaximizable())); + p.add(max); + + frame.add(p, BorderLayout.SOUTH); + frame.setSize(650, 250); + return frame; + } + +} diff --git a/test/jdk/javax/swing/JTextField/bug4232716.java b/test/jdk/javax/swing/JTextField/bug4232716.java new file mode 100644 index 00000000000..b4fc902f623 --- /dev/null +++ b/test/jdk/javax/swing/JTextField/bug4232716.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 1999, 2025, 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 + * @bug 4232716 + * @key headful + * @summary Tests if creates a maximized JTextField + * @run main bug4232716 + */ + +import java.awt.Component; +import java.awt.Container; +import java.awt.Robot; +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; + +public class bug4232716 { + + private static JFrame frame; + private static JEditorPane e; + + public static void main(String[] args) throws Exception { + Robot robot = new Robot(); + try { + SwingUtilities.invokeAndWait(() -> { + frame = new JFrame("bug4232716"); + String html =" Test " + + "
" + + "
"; + e = new JEditorPane("text/html", html); + e.setEditable(false); + frame.add(e); + frame.setSize(400, 300); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + }); + robot.waitForIdle(); + robot.delay(1000); + + Container c = (Container)e.getComponent(0); + Component swingComponent = c.getComponent(0); + System.out.println(swingComponent); + if (swingComponent instanceof JTextField tf) { + System.out.println(tf.getWidth()); + System.out.println(frame.getWidth()); + if (swingComponent.getWidth() > (frame.getWidth() * 0.75)) { + throw new RuntimeException("textfield width almost same as frame width"); + } + } + } finally { + SwingUtilities.invokeAndWait(() -> { + if (frame != null) { + frame.dispose(); + } + }); + } + } +} diff --git a/test/jdk/javax/swing/JTextField/bug5027332.java b/test/jdk/javax/swing/JTextField/bug5027332.java new file mode 100644 index 00000000000..2d9cd777d9b --- /dev/null +++ b/test/jdk/javax/swing/JTextField/bug5027332.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2004, 2025, 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 + * @bug 5027332 + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @summary Tests that textfield caret is placed slightly off textfield borders + * @run main/manual bug5027332 + */ + +import java.awt.BorderLayout; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.UIManager; + +public class bug5027332 { + + private static final String INSTRUCTIONS = """ + Click into the text field so that caret appears inside. + The caret should be placed slightly off text field borders, + so that it can be easily distinguished from the border. + Test fails if the caret touches the border."""; + + public static void main(String[] args) throws Exception { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + + PassFailJFrame.builder() + .title("bug5027332 Instructions") + .instructions(INSTRUCTIONS) + .rows(6) + .columns(35) + .testUI(bug5027332::createTestUI) + .build() + .awaitAndCheck(); + } + + private static JFrame createTestUI() { + JFrame frame = new JFrame("bug5027332"); + JTextField t = new JTextField(10); + JPanel p = new JPanel(); + p.add(t, BorderLayout.CENTER); + frame.setContentPane(p); + frame.pack(); + return frame; + } +}