| /* |
| * Copyright (c) 2015, 2017, 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 |
| * @key headful |
| * @bug 8067346 |
| * @summary Submenu has a changed offset on Windows7 with Windows look and feel |
| * @requires (os.family == "windows") |
| * @run main bug8067346 |
| */ |
| |
| import java.awt.Insets; |
| import javax.swing.JFrame; |
| import javax.swing.JMenu; |
| import javax.swing.JMenuBar; |
| import javax.swing.JMenuItem; |
| import javax.swing.SwingUtilities; |
| import javax.swing.UIManager; |
| import javax.swing.UnsupportedLookAndFeelException; |
| |
| |
| public class bug8067346 { |
| |
| private JMenuBar menuBar; |
| private JFrame frame; |
| private String[] menuClasses = {"MenuItem", "Menu", |
| "CheckBoxMenuItem", "RadioButtonMenuItem"}; |
| private String MARGIN = ".margin"; |
| private String CHECKICONOFFSET = ".checkIconOffset"; |
| private static boolean runTest = true; |
| |
| public static void main(String[] args) throws Exception { |
| SwingUtilities.invokeAndWait(new Runnable() { |
| |
| @Override |
| public void run() { |
| bug8067346 test = new bug8067346(); |
| try { |
| // set windows look and feel |
| String lnf = |
| "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; |
| UIManager.setLookAndFeel(lnf); |
| } catch (UnsupportedLookAndFeelException e) { |
| runTest = false; |
| } catch (ClassNotFoundException e) { |
| runTest = false; |
| } catch (InstantiationException e) { |
| runTest = false; |
| } catch (IllegalAccessException e) { |
| runTest = false; |
| } |
| if(runTest) { |
| test.createUI(); |
| test.performTest(); |
| test.dispose(); |
| } |
| } |
| }); |
| } |
| |
| public void createUI() { |
| |
| frame = new JFrame(); |
| menuBar = new JMenuBar(); |
| frame.setJMenuBar(menuBar); |
| JMenu menu, submenu; |
| JMenuItem menuItem; |
| |
| menu = new JMenu("A Menu"); |
| menuBar.add(menu); |
| menu.addSeparator(); |
| |
| submenu = new JMenu("A submenu"); |
| |
| menuItem = new JMenuItem("An item in the submenu"); |
| submenu.add(menuItem); |
| menu.add(submenu); |
| } |
| |
| public void performTest() { |
| try { |
| String errorMessage = "Incorrect value for "; |
| StringBuilder errorMessageBuilder = new StringBuilder(errorMessage); |
| boolean error = false; |
| int retVal = testMargin(); |
| if (retVal != 0) { |
| errorMessageBuilder.append(menuClasses[retVal]) |
| .append(MARGIN).append("\n"); |
| error = true; |
| } |
| retVal = testCheckIconOffset(); |
| if (retVal != 0) { |
| errorMessageBuilder.append(errorMessage) |
| .append(menuClasses[retVal]).append(CHECKICONOFFSET); |
| } |
| if (error || retVal != 0) { |
| throw new RuntimeException(errorMessageBuilder.toString()); |
| } |
| } finally { |
| dispose(); |
| } |
| } |
| |
| private int testMargin() { |
| |
| for (int inx = 0; inx < menuClasses.length; inx++) { |
| Insets margin = (Insets) UIManager.get(menuClasses[inx] + MARGIN); |
| if (margin != null && margin.bottom == 0 && margin.left == 0 |
| && margin.right == 0 && margin.top == 0) { |
| return inx + 1; |
| } |
| } |
| return 0; |
| } |
| |
| private int testCheckIconOffset() { |
| |
| for (int inx = 0; inx < menuClasses.length; inx++) { |
| Object checkIconOffset = UIManager.get(menuClasses[inx] |
| + CHECKICONOFFSET); |
| if (checkIconOffset != null && ((Integer) checkIconOffset) == 0) { |
| return inx + 1; |
| } |
| } |
| return 0; |
| } |
| |
| public void dispose() { |
| frame.dispose(); |
| } |
| } |