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; - } - -}