我的主要问题是设置 JFrame 时使用以下代码:
public Frame(){
JPanel panel = new JPanel();
add(panel);
panel.setPreferredSize(new Dimension(200, 200));
pack(); // This is the relevant code
setResizable(false); // This is the relevant code
setVisible(true);
}
通过以下打印声明,我们收到了错误的面板尺寸:
System.out.println("Frame: " + this.getInsets());
System.out.println("Frame: " + this.getSize());
System.out.println("Panel: " + panel.getInsets());
System.out.println("Panel: " + panel.getSize());
Output:
Frame: java.awt.Insets[top=25,left=3,bottom=3,right=3]
Frame: java.awt.Dimension[width=216,height=238]
Panel: java.awt.Insets[top=0,left=0,bottom=0,right=0]
Panel: java.awt.Dimension[width=210,height=210]
我发现将相关代码修改为以下可以解决问题:
public Frame(){
JPanel panel = new JPanel();
add(panel);
panel.setPreferredSize(new Dimension(200, 200));
setResizable(false); // Relevant code rearranged
pack(); // Relevant code rearranged
setVisible(true);
}
这将为我们的面板生成正确的尺寸(使用与之前相同的打印语句):
Frame: java.awt.Insets[top=25,left=3,bottom=3,right=3]
Frame: java.awt.Dimension[width=206,height=228]
Panel: java.awt.Insets[top=0,left=0,bottom=0,right=0]
Panel: java.awt.Dimension[width=200,height=200]
我查看了一些文档,但找不到这 10 个像素的来源。有人知道为什么会这样吗?