我正在尝试将某些特定图形绘制到JPanel
(添加到JFrame
上),就像网格一样。我使用框架的长度和宽度来确定网格上单元格的大小。当网格被绘制时,它不适合默认的帧大小,我需要手动重新调整框架大小以便能够看到整个网格。在我的例子中:
我有600x600的画面。 我想绘制一个20x20网格。 因此,每帧应为30x30像素。
我绘制网格,这是代码完成后发生的事情:
我试图找到修复此问题的方法,但每个人都说要使用frame.pack()
,因为我没有使用(添加)任何JComponent
个对象,因此我无法使用{{1}}在面板中,它都是自定义渲染。
答案 0 :(得分:2)
但是每个人都说要使用frame.pack()
哪个是正确的。
我没有在面板中使用(添加)任何JComponent对象,它都是自定义渲染的。
如果您没有在面板中添加组件,那么您正在面板上进行自定义绘画。因此,您需要覆盖自定义绘图面板的getPreferredSize()
方法以返回面板的大小,以便pack()方法可以正常工作。
@Override
public Dimension getPreferredSize()
{
return new Dimension(600, 600);
}
现在当你打包()框架时,框架尺寸将是面板的大小,加上框架上的装饰尺寸(标题栏,边框),无论你使用什么操作系统或LAF。
答案 1 :(得分:0)
我相信您的问题是,在为JFrame指定尺寸时,编译器会从给定尺寸获取边框(插入)的尺寸。这导致窗口的显示部分比指定的尺寸略小。解决此问题的方法是将插图的尺寸添加到框架尺寸中:
setSize(600+getInsets().right+getInsets().left,600+getInsets().top+getInsets().bottom);
或者如果您想使用SetSize(Dimension):
Dimension d = new Dimension(600+getInsets().right+getInsets().left,600+getInsets().top+getInsets().bottom);
setSize(d);