我正在覆盖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
答案 0 :(得分:3)
首先,小心剪裁。重绘管理器在将剪切矩形传递给组件时已经设置了剪切矩形,并且最终可以在组件外部进行绘制(如果您已经创建了自己的缓冲区,那么请将自己敲出来)。
组件大小为0,表示您想要的宽度为getWidth() - 1
这与集合和数组的概念相同。
此外,当我在这里时,你假设窗口大小(比如说500)将环绕你的组件。这是相反的方式。由于窗口边界,大小为500的窗口将生成小于该窗口的组件。