JPanel.getWidth()不准确。为什么?

时间:2012-08-23 07:21:41

标签: java swing user-interface jpanel

我正在覆盖JPanel的paintComponent()方法,以便在屏幕上绘制一些内容。

这就是它的样子:

JPanel

我正在使用以下代码设置剪裁区域。这样可以使边缘弯曲。

RoundRectangle2D r = new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), 100, 150);
g.setClip(r);

显然,窗口右侧存在问题。经过进一步检查,我发现JPanel的getWidth()方法没有报告正确的数字。通常,它稍微偏离。例如:

Width = 500,  getWidth() = 492
Width = 1000, getWidth() = 992
Width = 100,  getWidth() = 192
Width = 350,  getWidth() = 342
Width = 600,  getWidth() = 592

我的问题是,为什么始终错误?为什么getHeight()正确?

如果没有编程方式来获得真正的宽度,我应该简单地添加8

1 个答案:

答案 0 :(得分:3)

首先,小心剪裁。重绘管理器在将剪切矩形传递给组件时已经设置了剪切矩形,并且最终可以在组件外部进行绘制(如果您已经创建了自己的缓冲区,那么请将自己敲出来)。

组件大小为0,表示您想要的宽度为getWidth() - 1

这与集合和数组的概念相同。

此外,当我在这里时,你假设窗口大小(比如说500)将环绕你的组件。这是相反的方式。由于窗口边界,大小为500的窗口将生成小于该窗口的组件。