Java setResizeable(false) 更改窗口大小 (swing)

2022-09-03 01:28:38

我有一个奇怪的问题。我正在对窗口(= JFrame和Windows)使用空布局,如果我使用setResizeable(false),窗口大小会变大(到右侧和底部,我会说大约10个像素)。我不知道为什么。

两个println的返回大小相同,有什么奇怪的,也是...

mainWnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWnd.setTitle(wndTitle);
mainWnd.setBounds(wndPosX, wndPosY, wndWidth, wndHeight);
System.out.println(mainWnd.getHeight() + mainWnd.getWidth());
mainWnd.setResizable(false);
System.out.println(mainWnd.getHeight() + mainWnd.getWidth());

有人有想法吗?为什么窗口会调整大小?

更新:这里也是一样的(使用和不带 setResize 进行编译,如果重叠窗口,您可以看到它):

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Main
{
    private static JFrame mainWnd = null;

    public static void main(String[] args)
    {
        mainWnd = new JFrame();

        mainWnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainWnd.setTitle("asda");
        mainWnd.setBounds(50, 50, 300, 300);

        mainWnd.setResizable(false);

        mainWnd.setVisible(true);
    }
}

答案 1

在我的示例中,它不会改变,因此您必须有其他原因导致您的问题:

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Test4 {

    protected static void initUI() {
        JFrame frame = new JFrame("test");
        frame.setBounds(0, 0, 300, 200);
        frame.setVisible(true);
        System.err.println(frame.getSize());
        frame.setResizable(false);
        System.err.println(frame.getSize());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                initUI();
            }
        });
    }
}

编辑/更新:

不知何故,当您将可调整大小设置为 false 时,插入不正确(至少在 Windows 7 和 JDK 6 上)。不知何故,它们从30,8,8,8更改为25,3,3,3,3,尽管边框(由操作系统绘制)实际上保持不变。由于插图是 Frame 边界的一部分,因此当框架不可调整大小时,它实际上太大(视觉上)。对我来说,当帧不可调整时,计算的插入中似乎存在错误。


答案 2

如果在设置边界之前将 setResizeable 设置为 false,则不会遇到问题。正如Gergely Szilagyi之前所说,您正在摆脱滚动条,但是窗口的大小被锁定,因此您最终在框架中获得了9或10个像素的额外空间。我只是遇到了同样的问题。感谢您的帮助。