bug6274267.java revision 11018:66682f651425
1/*
2 * Copyright (c) 2011, 2014, 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.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26/* @test
27   @bug 6274267
28   @summary Checks that ScrollPaneLayout properly calculates preferred
29   layout size.
30   @author Mikhail Lapshin
31   @run main bug6274267
32*/
33
34import javax.swing.*;
35import java.awt.*;
36
37public class bug6274267 {
38    private JFrame frame;
39    private Component left;
40
41    public static void main(String[] args) throws Exception {
42        final bug6274267 test = new bug6274267();
43        Robot robot = new Robot();
44        try {
45            SwingUtilities.invokeAndWait(new Runnable() {
46                public void run() {
47                    test.setupUI1();
48                }
49            });
50            robot.waitForIdle();
51            SwingUtilities.invokeAndWait(new Runnable() {
52                public void run() {
53                    test.setupUI2();
54                }
55            });
56            test.test();
57        } finally {
58            if (test.frame != null) {
59                test.frame.dispose();
60            }
61        }
62    }
63
64    private void setupUI1() {
65        frame = new JFrame();
66        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
67
68        left = new JPanel();
69        left.setPreferredSize(new Dimension(100, 100));
70
71        JPanel rightPanel = new JPanel();
72        rightPanel.setPreferredSize(new Dimension(100, 50));
73        Component right = new JScrollPane(rightPanel);
74
75        JSplitPane split =
76                new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right);
77
78        frame = new JFrame();
79        frame.add(split);
80        frame.pack();
81    }
82
83    // It is important to separate frame.pack() from frame.setVisible(true).
84    // Otherwise the repaint manager will combine validate() calls and
85    // the bug won't appear.
86    private void setupUI2() {
87        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
88        frame.setLocationRelativeTo(null);
89        frame.setVisible(true);
90    }
91
92    private void test() throws Exception {
93        if (left.getSize().width == 100) {
94            System.out.println("Test passed");
95        } else {
96            throw new RuntimeException("ScrollPaneLayout sometimes improperly " +
97                    "calculates the preferred layout size. ");
98        }
99    }
100}
101