diff --git a/test/jdk/javax/swing/JMenuItem/MenuItemTest/MenuItemTestHelper.java b/test/jdk/javax/swing/JMenuItem/MenuItemTest/MenuItemTestHelper.java
new file mode 100644
index 0000000000000..16b8749058555
--- /dev/null
+++ b/test/jdk/javax/swing/JMenuItem/MenuItemTest/MenuItemTestHelper.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2005, 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.
+ */
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.ComponentOrientation;
+import java.awt.Graphics;
+import java.awt.event.KeyEvent;
+import javax.swing.Icon;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.KeyStroke;
+import javax.swing.UIManager;
+
+final class MenuItemTestHelper {
+
+ public static JFrame getMenuItemTestFrame(boolean isLeft, String lafName) {
+ boolean applyLookAndFeel = lafName != null;
+ if (applyLookAndFeel) {
+ try {
+ UIManager.setLookAndFeel(lafName);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ Icon myIcon = new ColoredIcon(Color.RED, 10, 10);
+ Icon myIcon2 = new ColoredIcon(Color.GREEN, 15, 10);
+
+ JMenuBar menuBar = new JMenuBar();
+ menuBar.add(createViewMenu(myIcon, myIcon2));
+ menuBar.add(createNoNothingMenu());
+ menuBar.add(createSomeIconsMenu(myIcon, myIcon2));
+
+ String title = (isLeft ? "(Left-to-right)" : "(Right-to-left)") + " - Menu Item Test";
+ JFrame frame = new JFrame(title);
+ frame.setJMenuBar(menuBar);
+ frame.applyComponentOrientation(isLeft
+ ? ComponentOrientation.LEFT_TO_RIGHT
+ : ComponentOrientation.RIGHT_TO_LEFT);
+
+ if (applyLookAndFeel) {
+ String shortName = lafName.substring(lafName.lastIndexOf('.') + 1);
+ JLabel label = new JLabel("
" + shortName + "
");
+ frame.setLayout(new BorderLayout());
+ frame.add(label, BorderLayout.CENTER);
+ }
+
+ frame.setSize(300, 300);
+ return frame;
+ }
+
+ public static JFrame getMenuItemTestFrame(boolean isLeft) {
+ return getMenuItemTestFrame(isLeft, null);
+ }
+
+ private static JMenu createViewMenu(Icon myIcon, Icon myIcon2) {
+ JMenu menu = new JMenu("View");
+ menu.setMnemonic('V');
+ menu.add(new JMenuItem("Refresh"));
+ menu.add(new JMenuItem("Customize..."));
+ menu.add(new JCheckBoxMenuItem("Show Toolbar"));
+ menu.addSeparator();
+ menu.add(new JRadioButtonMenuItem("List"));
+ menu.add(new JRadioButtonMenuItem("Icons"));
+
+ JRadioButtonMenuItem rm2 = new JRadioButtonMenuItem("And icon.");
+ rm2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, KeyEvent.SHIFT_DOWN_MASK));
+ rm2.setIcon(myIcon2);
+ menu.add(rm2);
+
+ JRadioButtonMenuItem mi3 = new JRadioButtonMenuItem("Radio w/icon");
+ mi3.setIcon(myIcon);
+ menu.add(mi3);
+
+ menu.add(new JMenuItem(myIcon2));
+
+ JMenuItem mi4 = new JMenuItem("Item with icon");
+ mi4.setIcon(myIcon);
+ menu.addSeparator();
+ menu.add(mi4);
+
+ return menu;
+ }
+
+ private static JMenu createNoNothingMenu() {
+ final JMenu noMenu = new JMenu("No nothing");
+
+ for (String label : new String[]{"One", "Two", "Threeee"}) {
+ JMenuItem item = new JMenuItem(label);
+ item.addActionListener((e) ->
+ PassFailJFrame.log("menu.width = "
+ + noMenu.getPopupMenu().getWidth()));
+ noMenu.add(item);
+ }
+
+ return noMenu;
+ }
+
+ private static JMenu createSomeIconsMenu(Icon myIcon, Icon myIcon2) {
+ JMenu someIcons = new JMenu("Some icons");
+
+ JMenuItem imi1 = new JMenuItem("Icon!");
+ imi1.setIcon(myIcon);
+ someIcons.add(imi1);
+
+ JMenuItem imi2 = new JMenuItem("Wide icon!");
+ imi2.setIcon(myIcon2);
+ someIcons.add(imi2);
+
+ someIcons.add(new JCheckBoxMenuItem("CheckBox"));
+ someIcons.add(new JRadioButtonMenuItem("RadioButton"));
+
+ return someIcons;
+ }
+
+ private record ColoredIcon(Color color, int width, int height)
+ implements Icon {
+ @Override
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ Color oldColor = g.getColor();
+ g.setColor(color);
+ g.fillRect(x, y, width, height);
+ g.setColor(oldColor);
+ }
+
+ @Override
+ public int getIconWidth() {
+ return width;
+ }
+
+ @Override
+ public int getIconHeight() {
+ return height;
+ }
+ }
+}
diff --git a/test/jdk/javax/swing/JMenuItem/MenuItemTest/bug4729669.java b/test/jdk/javax/swing/JMenuItem/MenuItemTest/bug4729669.java
new file mode 100644
index 0000000000000..6518b6b8fae53
--- /dev/null
+++ b/test/jdk/javax/swing/JMenuItem/MenuItemTest/bug4729669.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2005, 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 4729669
+ * @summary 1.4 REGRESSION: Text edge of different types of JMenuItems are not aligned
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual bug4729669
+ */
+
+import java.util.List;
+import javax.swing.JFrame;
+
+public class bug4729669 {
+
+ private static final String INSTRUCTIONS = """
+ Two windows should appear: Left-to-right and Right-to-left.
+ Check that text on all the menu items of all menus
+ is properly vertically aligned.""";
+
+ public static void main(String[] args) throws Exception {
+ PassFailJFrame.builder()
+ .title("bug4729669 Instructions")
+ .instructions(INSTRUCTIONS)
+ .columns(35)
+ .testUI(bug4729669::createTestUI)
+ .positionTestUIRightColumn()
+ .logArea()
+ .build()
+ .awaitAndCheck();
+ }
+
+ private static List createTestUI() {
+ JFrame f1 = MenuItemTestHelper.getMenuItemTestFrame(true);
+ JFrame f2 = MenuItemTestHelper.getMenuItemTestFrame(false);
+ return List.of(f1, f2);
+ }
+}
+
diff --git a/test/jdk/javax/swing/JMenuItem/bug6197830.java b/test/jdk/javax/swing/JMenuItem/MenuItemTest/bug6197830.java
similarity index 56%
rename from test/jdk/javax/swing/JMenuItem/bug6197830.java
rename to test/jdk/javax/swing/JMenuItem/MenuItemTest/bug6197830.java
index 58fd9a76e23c9..afb1c7bb33f95 100644
--- a/test/jdk/javax/swing/JMenuItem/bug6197830.java
+++ b/test/jdk/javax/swing/JMenuItem/MenuItemTest/bug6197830.java
@@ -31,13 +31,16 @@
* @run main/manual bug6197830
*/
+import java.util.List;
+import javax.swing.JFrame;
+
public class bug6197830 {
private static final String INSTRUCTIONS = """
- Four windows should appear: Left-to-right and Right-to-left for
- the two different Look and Feels (Motif and GTK).
- Check that text on all the menu items of all menus is properly
- vertically aligned.""";
+ Four windows should appear: Left-to-right and Right-to-left for
+ the two different Look and Feels (Motif and GTK).
+ Check that text on all the menu items of all menus is properly
+ vertically aligned.""";
public static void main(String[] args) throws Exception {
PassFailJFrame.builder()
@@ -45,30 +48,20 @@ public static void main(String[] args) throws Exception {
.instructions(INSTRUCTIONS)
.columns(35)
.testUI(bug6197830::createTestUI)
- .position(PassFailJFrame.Position.TOP_LEFT_CORNER)
+ .positionTestUIBottomRowCentered()
.build()
.awaitAndCheck();
}
private static List createTestUI() {
- JFrame frame1 = MenuItemTest.doMenuItemTest(true,
- "com.sun.java.swing.plaf.motif.MotifLookAndFeel",
- 20);
- frame1.setLocation(300, 300);
- JFrame frame2 = MenuItemTest.doMenuItemTest(false,
- "com.sun.java.swing.plaf.motif.MotifLookAndFeel",
- 20);
- frame2.setLocation((int)(frame1.getLocation().getX() + frame1.getWidth()
- + 100), 300);
- JFrame frame3 = MenuItemTest.doMenuItemTest(true,
- "com.sun.java.swing.plaf.gtk.GTKLookAndFeel", 420);
- frame3.setLocation(300, (int)(frame1.getLocation().getY()
- + frame1.getHeight() + 100));
- JFrame frame4 = MenuItemTest.doMenuItemTest(false,
- "com.sun.java.swing.plaf.gtk.GTKLookAndFeel", 420);
- frame4.setLocation((int)(frame3.getLocation().getX() + frame3.getWidth()
- + 100),
- (int)frame3.getLocation().getY());
+ JFrame frame1 = MenuItemTestHelper.getMenuItemTestFrame(true,
+ "com.sun.java.swing.plaf.motif.MotifLookAndFeel");
+ JFrame frame2 = MenuItemTestHelper.getMenuItemTestFrame(false,
+ "com.sun.java.swing.plaf.motif.MotifLookAndFeel");
+ JFrame frame3 = MenuItemTestHelper.getMenuItemTestFrame(true,
+ "com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
+ JFrame frame4 = MenuItemTestHelper.getMenuItemTestFrame(false,
+ "com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
return List.of(frame1, frame2, frame3, frame4);
}
}
diff --git a/test/jdk/javax/swing/JMenuItem/bug4729669.java b/test/jdk/javax/swing/JMenuItem/bug4729669.java
deleted file mode 100644
index 815558fc8fdc6..0000000000000
--- a/test/jdk/javax/swing/JMenuItem/bug4729669.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2005, 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 4729669
- * @summary 1.4 REGRESSION: Text edge of different types of JMenuItems are not aligned
- * @library /java/awt/regtesthelpers
- * @build PassFailJFrame
- * @run main/manual bug4729669
- */
-
-import java.awt.Color;
-import java.awt.ComponentOrientation;
-import java.awt.Component;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-
-import javax.swing.AbstractAction;
-import javax.swing.Icon;
-import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.JRadioButtonMenuItem;
-import javax.swing.KeyStroke;
-
-import java.util.List;
-
-public class bug4729669 {
-
- private static final String INSTRUCTIONS = """
- Two windows should appear: Left-to-right and Right-to-left.
- Check that text on all the menu items of all menus
- is properly vertically aligned.""";
-
- public static void main(String[] args) throws Exception {
- PassFailJFrame.builder()
- .title("bug4729669 Instructions")
- .instructions(INSTRUCTIONS)
- .columns(35)
- .testUI(bug4729669::createTestUI)
- .position(PassFailJFrame.Position.TOP_LEFT_CORNER)
- .logArea()
- .build()
- .awaitAndCheck();
- }
-
- private static List createTestUI() {
- JFrame f1 = MenuItemTest.doMenuItemTest(true);
- f1.setLocation(300, 300);
- JFrame f2 = MenuItemTest.doMenuItemTest(false);
- f2.setLocation(500, 300);
- return List.of(f1, f2);
- }
-}
-
-class MenuItemTest {
- public static JFrame doMenuItemTest(boolean isLeft) {
- JMenu menu = new JMenu("View");
- menu.setMnemonic('V');
-
- menu.add(new JMenuItem("Refresh"));
- menu.add(new JMenuItem("Customize..."));
- menu.add(new JCheckBoxMenuItem("Show Toolbar"));
- menu.addSeparator();
- menu.add(new JRadioButtonMenuItem("List"));
- menu.add(new JRadioButtonMenuItem("Icons"));
- JRadioButtonMenuItem rm2 = new JRadioButtonMenuItem("And icon.");
- rm2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,
- KeyEvent.SHIFT_MASK));
- menu.add(rm2);
- JRadioButtonMenuItem mi3 = new JRadioButtonMenuItem("Radio w/icon");
-
- Icon myIcon = new Icon() { // 10 pixel red
- public void paintIcon(Component c, Graphics g, int x, int y) {
- Color color = g.getColor();
- g.setColor(Color.RED);
- g.fillRect(x, y, 10, 10);
- g.setColor(color);
- }
-
- public int getIconWidth() {
- return 10;
- }
-
- public int getIconHeight() {
- return 10;
- }
- };
-
- Icon myIcon2 = new Icon() { // 15 pixel green
- public void paintIcon(Component c, Graphics g, int x, int y) {
- Color color = g.getColor();
- g.setColor(Color.GREEN);
- g.fillRect(x, y, 15, 10);
- g.setColor(color);
- }
-
- public int getIconWidth() {
- return 15;
- }
-
- public int getIconHeight() {
- return 10;
- }
- };
-
- rm2.setIcon(myIcon2);
-
- mi3.setIcon(myIcon);
- menu.add(mi3);
- menu.add(new JMenuItem(myIcon2));
-
- final JMenu menu2 = new JMenu("No nothing");
- menu2.add("One").addActionListener(new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- PassFailJFrame.log("menu.width = " + menu2.getPopupMenu().getWidth());
- }
- });
- menu2.add("Two").addActionListener(new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- PassFailJFrame.log("menu.width = " + menu2.getPopupMenu().getWidth());
- }
- });
- menu2.add("Threeee").addActionListener(new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- PassFailJFrame.log("menu.width = " + menu2.getPopupMenu().getWidth());
- }
- });
-
- JMenuItem mi4 = new JMenuItem("Item with icon");
- mi4.setIcon(myIcon);
- menu.addSeparator();
- menu.add(mi4);
- String title = "Menu Item Test " + (isLeft ? "(Left-to-right)" : "(Right-to-left)");
- JFrame frame = new JFrame(title);
-
- JMenuBar menuBar = new JMenuBar();
- menuBar.add(menu);
- menuBar.add(menu2);
-
- JMenu someIcons = new JMenu("Some icons");
- JMenuItem imi1 = new JMenuItem("Icon!");
- imi1.setIcon(myIcon);
- someIcons.add(imi1);
- JMenuItem imi2 = new JMenuItem("Wide icon!");
- imi2.setIcon(myIcon2);
- someIcons.add(imi2);
- someIcons.add(new JCheckBoxMenuItem("CheckBox"));
- someIcons.add(new JRadioButtonMenuItem("RadioButton"));
- menuBar.add(someIcons);
- frame.setJMenuBar(menuBar);
- ComponentOrientation co = (isLeft ?
- ComponentOrientation.LEFT_TO_RIGHT :
- ComponentOrientation.RIGHT_TO_LEFT);
- frame.applyComponentOrientation(co);
- frame.setSize(300, 300);
- int frameX = isLeft ? 0 : 600;
- frame.setLocation(frameX, 20);
- return frame;
- }
-
-}