Skip to content

Commit 3c09c2c

Browse files
committed
8267961: JInternalFrame.getNormalBounds() returns normalBounds when maximized state is false instead of bounds
Reviewed-by: tr, dnguyen
1 parent 96f6ffb commit 3c09c2c

2 files changed

Lines changed: 79 additions & 0 deletions

File tree

src/java.desktop/share/classes/javax/swing/JInternalFrame.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,9 @@ public boolean isMaximum() {
987987
= "Indicates whether this internal frame is maximized.")
988988
public void setMaximum(boolean b) throws PropertyVetoException {
989989
if (isMaximum == b) {
990+
if (!b) {
991+
normalBounds = null;
992+
}
990993
return;
991994
}
992995

@@ -998,6 +1001,9 @@ public void setMaximum(boolean b) throws PropertyVetoException {
9981001
get it wrong... See, for example, getNormalBounds() */
9991002
isMaximum = b;
10001003
firePropertyChange(IS_MAXIMUM_PROPERTY, oldValue, newValue);
1004+
if (!b) {
1005+
normalBounds = null;
1006+
}
10011007
}
10021008

10031009
/**
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright (c) 2026, 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+
* @key headful
27+
* @bug 8267961
28+
* @summary Verify JInternalFrame.getNormalBounds()
29+
* returns getBounds() value in non-maximized state
30+
* @run main TestNonMaximizedNormalBounds
31+
*/
32+
33+
import java.awt.Rectangle;
34+
import javax.swing.JDesktopPane;
35+
import javax.swing.JInternalFrame;
36+
import javax.swing.SwingUtilities;
37+
import java.beans.PropertyVetoException;
38+
39+
public class TestNonMaximizedNormalBounds {
40+
41+
private static volatile Rectangle bounds;
42+
private static volatile Rectangle normalBounds;
43+
private static JInternalFrame jif;
44+
45+
public static void main(String[] args) throws Exception {
46+
SwingUtilities.invokeAndWait(() -> {
47+
Rectangle bounds = new Rectangle(96, 97, 98, 99);
48+
Rectangle nbounds = new Rectangle(196, 197, 198, 199);
49+
JDesktopPane p = new JDesktopPane();
50+
jif = new JInternalFrame();
51+
p.add(jif);
52+
jif.setBounds(bounds);
53+
jif.setNormalBounds(nbounds);
54+
});
55+
Thread.sleep(100);
56+
SwingUtilities.invokeAndWait(() -> {
57+
try {
58+
jif.setMaximum(false);
59+
} catch (PropertyVetoException e) {
60+
throw new RuntimeException(e);
61+
}
62+
});
63+
Thread.sleep(100);
64+
SwingUtilities.invokeAndWait(() -> {
65+
normalBounds = jif.getNormalBounds();
66+
bounds = jif.getBounds();
67+
});
68+
if (!normalBounds.equals(bounds)) {
69+
System.out.println("normalBounds " + normalBounds + " getBounds " + bounds);
70+
throw new RuntimeException("normalBounds not equal to getBounds in non-maximized state");
71+
}
72+
}
73+
}

0 commit comments

Comments
 (0)