Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 163 additions & 0 deletions test/jdk/javax/swing/JMenuItem/MenuItemTest/MenuItemTestHelper.java
Original file line number Diff line number Diff line change
@@ -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("<HTML><H2>" + shortName + "</H2></HTML>");
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;
}
}
}
61 changes: 61 additions & 0 deletions test/jdk/javax/swing/JMenuItem/MenuItemTest/bug4729669.java
Original file line number Diff line number Diff line change
@@ -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<JFrame> createTestUI() {
JFrame f1 = MenuItemTestHelper.getMenuItemTestFrame(true);
JFrame f2 = MenuItemTestHelper.getMenuItemTestFrame(false);
return List.of(f1, f2);
}
}

67 changes: 67 additions & 0 deletions test/jdk/javax/swing/JMenuItem/MenuItemTest/bug6197830.java
Original file line number Diff line number Diff line change
@@ -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<JFrame> 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);
}
}
67 changes: 67 additions & 0 deletions test/jdk/javax/swing/JMenuItem/bug4207339.java
Original file line number Diff line number Diff line change
@@ -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("<html><center>Is this text <font size=+3>big</font>" +
"and <font color=red>red</font>?" +
"<br>And on multiple lines?<br><br>" +
"<font size=+2 color=blue face=AvantGarde>Yo!</font>" +
"Then press <em><b>PASS</b>!</center></html>");
panel.add(mi);
return panel;
}

}
Loading