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 00000000000..16b87490585
--- /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 00000000000..6518b6b8fae
--- /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/MenuItemTest/bug6197830.java b/test/jdk/javax/swing/JMenuItem/MenuItemTest/bug6197830.java
new file mode 100644
index 00000000000..afb1c7bb33f
--- /dev/null
+++ b/test/jdk/javax/swing/JMenuItem/MenuItemTest/bug6197830.java
@@ -0,0 +1,67 @@
+/*
+ * 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 6197830
+ * @requires (os.family == "linux")
+ * @summary Fix for 4729669 does not work on Motif and GTK look and feels
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @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.""";
+
+ public static void main(String[] args) throws Exception {
+ PassFailJFrame.builder()
+ .title("bug6197830 Instructions")
+ .instructions(INSTRUCTIONS)
+ .columns(35)
+ .testUI(bug6197830::createTestUI)
+ .positionTestUIBottomRowCentered()
+ .build()
+ .awaitAndCheck();
+ }
+
+ private static List createTestUI() {
+ 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/bug4207339.java b/test/jdk/javax/swing/JMenuItem/bug4207339.java
new file mode 100644
index 00000000000..e2e3ef4e3cd
--- /dev/null
+++ b/test/jdk/javax/swing/JMenuItem/bug4207339.java
@@ -0,0 +1,67 @@
+/*
+ * 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 4207339
+ * @summary Verifies HTML label support for MenuItems
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual bug4207339
+ */
+
+import javax.swing.JPanel;
+import javax.swing.JMenuItem;
+
+public class bug4207339 {
+
+ private static final String INSTRUCTIONS = """
+ This tests html support in menuItem.
+ A MenuItem will be shown.
+ If the MenuItem is showing "big" text bigger than rest
+ and "red" text in red color and the text are in multiple lines,
+ and text "Yo" in blue color,
+ then press Pass else press Fail.""";
+
+ public static void main(String[] args) throws Exception {
+ PassFailJFrame.builder()
+ .title("bug4207339 Instructions")
+ .instructions(INSTRUCTIONS)
+ .columns(35)
+ .splitUI(bug4207339::createTestUI)
+ .build()
+ .awaitAndCheck();
+ }
+
+ private static JPanel createTestUI() {
+ JPanel panel = new JPanel();
+ JMenuItem mi = new JMenuItem("Is this text big" +
+ "and red?" +
+ "
And on multiple lines?
" +
+ "Yo!" +
+ "Then press PASS!");
+ panel.add(mi);
+ return panel;
+ }
+
+}
diff --git a/test/jdk/javax/swing/JMenuItem/bug4327146.java b/test/jdk/javax/swing/JMenuItem/bug4327146.java
new file mode 100644
index 00000000000..88d2b9618f0
--- /dev/null
+++ b/test/jdk/javax/swing/JMenuItem/bug4327146.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2001, 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 4327146
+ * @summary Tests menu width after removeAll()
+ * @key headful
+ * @run main bug4327146
+ */
+
+import java.awt.Dimension;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.InputEvent;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.SwingUtilities;
+
+public class bug4327146 {
+ private static JButton b;
+ private static JMenu m;
+ private static JFrame frame;
+ private static volatile Point loc;
+ private static volatile Dimension dim;
+ private static volatile Rectangle old_popupBounds;
+ private static volatile Rectangle new_popupBounds;
+
+ public static void main(String[] args) throws Exception {
+ Robot robot = new Robot();
+ try {
+ SwingUtilities.invokeAndWait(() -> {
+ frame = new JFrame("bug4327146");
+ m = new JMenu("Menu");
+ m.add(new JMenuItem("I'm an ugly bug, fix me right now please!"));
+
+ JMenuBar mbar = new JMenuBar();
+ mbar.add(m);
+ frame.setJMenuBar(mbar);
+
+ b = new JButton("Cut");
+ b.addActionListener(e -> {
+ m.removeAll();
+ m.add(new JMenuItem("Fixed :)"));
+ });
+ mbar.add(b);
+ frame.pack();
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ });
+ robot.waitForIdle();
+ robot.delay(1000);
+ SwingUtilities.invokeAndWait(() -> {
+ loc = b.getLocationOnScreen();
+ dim = b.getSize();
+ m.doClick();
+ });
+ robot.waitForIdle();
+ robot.delay(500);
+ SwingUtilities.invokeAndWait(() -> {
+ old_popupBounds = m.getPopupMenu().getBounds();
+ });
+ robot.mouseMove(loc.x + dim.width / 2, loc.y + dim.height / 2);
+ robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+ robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+ robot.waitForIdle();
+ robot.delay(500);
+ SwingUtilities.invokeAndWait(() -> {
+ m.doClick();
+ });
+ robot.waitForIdle();
+ robot.delay(500);
+ SwingUtilities.invokeAndWait(() -> {
+ new_popupBounds = m.getPopupMenu().getBounds();
+ });
+ if (new_popupBounds.getWidth() >= old_popupBounds.getWidth()) {
+ System.out.println("before cut popup Bounds " + old_popupBounds);
+ System.out.println("after cut popupBounds " + new_popupBounds);
+ throw new RuntimeException("JMenu popup width is wrong");
+ }
+ } finally {
+ SwingUtilities.invokeAndWait(() -> {
+ if (frame != null) {
+ frame.dispose();
+ }
+ });
+ }
+ }
+
+}
diff --git a/test/jdk/javax/swing/JMenuItem/bug4402082.java b/test/jdk/javax/swing/JMenuItem/bug4402082.java
new file mode 100644
index 00000000000..546a2d3218b
--- /dev/null
+++ b/test/jdk/javax/swing/JMenuItem/bug4402082.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2001, 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 4402082
+ * @requires (os.family == "windows")
+ * @summary Tests that JMenuItem accelerator is rendered correctly.
+ * @library /java/awt/regtesthelpers
+ * @build PassFailJFrame
+ * @run main/manual bug4402082
+ */
+
+import java.awt.Container;
+import java.awt.GridLayout;
+import java.awt.event.KeyEvent;
+import javax.swing.JFrame;
+import javax.swing.JMenuItem;
+import javax.swing.KeyStroke;
+import javax.swing.UIManager;
+
+public class bug4402082 {
+
+ private static final String INSTRUCTIONS = """
+ You see three menu items, each having different look-and-feels.
+ Each menu item should display accelerator "F1" on its right side.
+ The accelerator should be fully visible. If it is partially
+ offscreen, or not visible at all, test fails.""";
+
+ public static void main(String[] args) throws Exception {
+ PassFailJFrame.builder()
+ .title("bug4402082 Instructions")
+ .instructions(INSTRUCTIONS)
+ .columns(35)
+ .testUI(bug4402082::createTestUI)
+ .build()
+ .awaitAndCheck();
+ }
+
+ static JMenuItem getMenuItem(String lnf) {
+ try {
+ UIManager.setLookAndFeel(lnf);
+ } catch (Exception exc) {
+ System.err.println("Could not load LookAndFeel: " + lnf);
+ }
+ JMenuItem mi = new JMenuItem("Bad Item");
+ mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
+ return mi;
+ }
+
+ private static JFrame createTestUI() {
+ JFrame frame = new JFrame("bug4402082");
+ Container pane = frame.getContentPane();
+ pane.setLayout(new GridLayout(3,1));
+ pane.add(getMenuItem("javax.swing.plaf.metal.MetalLookAndFeel"));
+ pane.add(getMenuItem("com.sun.java.swing.plaf.motif.MotifLookAndFeel"));
+ pane.add(getMenuItem("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"));
+ frame.pack();
+ return frame;
+ }
+}
diff --git a/test/jdk/javax/swing/JMenuItem/bug4729669.java b/test/jdk/javax/swing/JMenuItem/bug4729669.java
deleted file mode 100644
index 815558fc8fd..00000000000
--- 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;
- }
-
-}