1/*
2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @bug 8179027
27 * @requires (os.family == "windows")
28 * @summary JComboBox too small under Windows LAF
29 * @run main WindowsComboBoxSizeTest
30 */
31
32import javax.swing.*;
33import java.awt.FlowLayout;
34import java.awt.Robot;
35
36public class WindowsComboBoxSizeTest {
37    private static JTextField textField;
38    private static JComboBox<String> comboBox;
39    private static JComboBox<String> comboBoxEd;
40    private static JFrame frame;
41
42    public static void main(String[] args) throws Exception {
43        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
44
45        SwingUtilities.invokeAndWait(() -> {
46            frame = new JFrame();
47            frame.getContentPane().setLayout( new FlowLayout() );
48
49            textField = new JTextField("item 1");
50            frame.getContentPane().add(textField);
51
52            comboBox = new JComboBox<>(new String[]
53                                                {"item 1", "item 2", "item 3"});
54            frame.getContentPane().add(comboBox);
55
56            comboBoxEd = new JComboBox<>(new String[]
57                                                {"item 1", "item 2", "item 3"});
58            comboBoxEd.setEditable( true );
59            frame.getContentPane().add(comboBoxEd);
60
61            frame.pack();
62            frame.setVisible( true );
63        });
64        Robot robot = new Robot();
65        robot.waitForIdle();
66
67        try {
68            test();
69        } finally {
70            SwingUtilities.invokeLater(frame::dispose);
71        }
72    }
73
74    private static void test() throws Exception {
75        SwingUtilities.invokeAndWait(() -> {
76            int expected = textField.getSize().height;
77            if (comboBox.getSize().height != expected ) {
78                throw new RuntimeException(
79                        "Wrong non-editable JComboBox height " +
80                                              comboBox.getSize().height);
81            }
82            if (comboBoxEd.getSize().height != expected ) {
83                throw new RuntimeException(
84                        "Wrong editable JComboBox height " +
85                                            comboBoxEd.getSize().height);
86            }
87        });
88    }
89}
90
91