Java的的setResizable(假)改变窗口大小(摆动)(Java setResizable(

2019-06-25 20:07发布

我有一个奇怪的问题。 我使用的是空布局窗口(=的JFrame和Windows),如果我用的setResizable(假)的窗口尺寸变大了(到右侧和底部,大约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());

是否有人有一个想法? 为什么窗口被调整?

UPDATE:同样的事情在这里(有和没有的setResizable比你可以看到它编译它,如果重叠窗口):

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);
    }
}

Answer 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();
            }
        });
    }
}

编辑/ UPDATE:

不知怎的,当你设置的可调整大小为假(至少在Windows 7和JDK 6)插图是不正确的。 不知怎的,他们从30,8,8,8更改为25,3,3,3虽然边界(这是由OS画)实际上保持不变。 由于插图是框架边界的一部分,实际上帧太大(视觉),当它不改变大小。 对我来说,它看起来像有在计算的插图中的错误时,帧不改变大小。



Answer 2:

如果你设定的范围之前设置的setResizable假的,你不会有问题。 作为盖尔盖伊Szilágyi的前所说,你摆脱滚动条,但窗口的大小被锁定,所以你最终的框架额外的空间9或10个像素。 我有同样的问题。 谢谢您的帮助。



Answer 3:

根据L&F设置可调整大小的(假/真)可能会改变窗口边框装饰。 没有最大化,没有调整箭头。 这本身就可以改变大小。



Answer 4:

更换:

frame.setResizable(false);

至:

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            frame.setResizable(false);
        }
    });


Answer 5:

嗯,我已经遇到了这个问题,它是一个外观和感觉的问题...

为什么可调整大小的帧具有(5,5,5,5)的插图? 这使我想到, 使其可调整大小增加了周围的框架一些额外的部件,像...某种“处理程序”的拖动来调整

然后我发现,如果我们使用默认的Java金属L&F和集setDefaultLookAndFeelDecorated(true) ,该处理器将被涂,因此,框架不会改变大小。 但在雨云,花片和Windows L&F这一点没有实现,所以这是一个错误。 我会报告。

我自己的问题,我用GIF答案就在这里:

摇摆-的setResizable(真)使JFrame的标题栏高和窗口大小小



Answer 6:

到目前为止,这个恼人的问题,最好的修补程序如下。 不要紧,你拨打setResizable(false)方法。 只需添加这一段代码后,你setVisible(true)

private void sizeBugPatch() {
    while (frame.getWidth() > yourWidth) {
        frame.pack();
    }
}

其中yourWidth是你在任何可能的方式设置,手动或通过覆盖 setPreferredSize方法。 解释是很容易的, frame.pack()似乎重置frame.setResizable(boolean b)不知何故。 你可以使用一个if代替while循环,但我更喜欢while要排除的情况下窗口仍然是额外的大小哪怕一秒钟后pack()



Answer 7:

我定义了一个2个JFrame的子类。 如果我运行在一个独立的应用程序的问题帧,帧大小是正确的。 如果我运行在一个独立的应用程序两者的帧,问题帧仍然较大。 我包以前做的setResizable(假的),我仍然得到这个问题。 我的解决办法是改变布局BorderLayout的和放下的(图像)面板在中间,然后做了的setResizable。



文章来源: Java setResizable(false) changes the window size (swing)