我正在尝试学习Swing并制作了一个面板(在其他StackOverflow代码的帮助下)。我在一个框架上添加了棋盘设计,但我发现框架没有它应该的那么大。
这是我的代码:
@Override
protected void paintComponent(Graphics g) {
int width = getWidth(), height = getHeight();
g.clearRect(0, 0, width, height);
g.setColor(Color.BLACK);
for (int i=0;i<=width;i+=50) {
g.drawLine(0,i,width,i);
}
for (int i=0;i<=height;i+=50) {
g.drawLine(i,0,i,height);
}
label.setText("H = "+ getHeight() +" W = "+ getWidth()); // check actual size
add(label);
}
private void gui(Pan window) {
frame = new JFrame();
Container container = frame.getContentPane();
container.add(window);
frame.setSize(400, 400); // size written here
frame.setVisible(true);
}
如果你运行它,你会看到窗口的大小。它将是362乘384,而不是代码中写的400乘400。
如果我将尺寸更改为500乘500,则窗口将为462乘484。
问:为什么尺寸偏差为38和16?
答案 0 :(得分:5)
它将是362乘384,而不是400乘400
因为框架的大小包括标题栏和边框。不要使用setSize()方法。
而是覆盖自定义面板的getPreferredSize()
方法,以返回您希望面板的大小。
然后你使用:
frame.pack();
然后框架的大小将是面板的首选大小,加上标题栏和边框的大小。