This question already has an answer here:
My JFrame always becomes a few pixels too big.
                                
                                    (1个答案)
                                
                        
                                3年前关闭。
            
                    
这是了解JFrame::setResizable(boolean)工作方式的简单程序:

JFrame frame = new JFrame("Test");
JPanel p1 = new JPanel();
FlowLayout fl = new FlowLayout(FlowLayout.LEADING, 0, 0);

//Adding buttons
p1.setLayout(fl);
p1.setBackground(Color.BLACK);
p1.add(new JButton("1"));
p1.add(new JButton("1"));
p1.add(new JButton("1"));
p1.add(new JButton("1"));
p1.add(new JButton("1"));

//Adding to JFrame
frame.add(p1);
frame.pack();

//Here is where the problem comes
frame.setResizable(false);

//The rest...
frame.setLocationRelativeTo(null);
frame.setVisible(true);


这就是它所显示的:

java - 为什么将resizable设置为false会导致出现一些填充?-LMLPHP

现在,当我将frame.setResizable(false);更改为frame.setResizable(true);时,它的工作原理如下(我没有进行任何大小调整,而是在启动之后进行的):

java - 为什么将resizable设置为false会导致出现一些填充?-LMLPHP

问题:第一个示例中的填充来自哪里?如第二个示例中所示,如何制作resizable = false窗口(即不包含这些填充)。

最佳答案

从此discussion看来,如果您更改setResizablepack的顺序,该问题将不再发生(我对此进行了测试并且有效)。

因此,请按以下顺序调用它们:

1)

frame.setResizable(false);


2)

frame.pack();

10-04 23:23