0

我正在重写 JPanel 的paintComponent()方法来在屏幕上绘制一些东西。

这是它的样子:

面板

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

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

4

1 回答 1

3

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

组件大小基于 0,这意味着您想要的宽度是getWidth() - 1

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

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

于 2012-08-23T07:24:26.497 回答