我正在为我的应用程序开发一个自定义的 Swing 组件,我开始使用 public void paintComponent(Graphics g)
绘制东西。一切都很好,除了我不能画任何矩形。我认为问题出在getX()
和getY()
部分,但我不确定。这是我的代码:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (mouseEntered) {
g.setColor(HIGHLIGHTED_COLOR);
} else {
g.setColor(BACKGROUND_COLOR);
}
g.fillRect(getX(), getY(), getWidth(), getHeight());
//Draw rest of stuff (works fine)
API 说它应该像这样使用:g.fillRect(x, y, width, height)
,这就是我正在做的。
绘图的其余部分工作正常,但我无法弄清楚为什么这不是绘图。有什么建议吗?
我不确定如何定义组件,但组件getX()
方法的默认值是组件左上角的 X 坐标(相对于根组件)。
在 Swing 中绘制组件的paintComponent(Graphics)
方法时,要绘制到的图形上下文的原点通常位于组件本身的左上角,而不是根组件。
因此,通过执行此调用:
g.fillRect(getX(), getY(), getWidth(), getHeight());
您可能正在组件的剪辑边界之外绘制矩形!
(例如,如果组件位于 100, 100 处,宽度为 20,高度为 20,则您正在绘制的矩形在绝对坐标中处于 (200, 200)
到 (220, 220)
处)
如果要绘制包含整个组件的矩形,则可能需要尝试类似以下内容:
g.fillRect(0, 0, getWidth(), getHeight());
这将从原点(同样,可能是组件的左上角)向下绘制到组件的宽度和高度。
(使用前面的示例:组件为 100、100,宽度/高度为 20,这将绘制的矩形为 (100, 100)
到 (120, 120)
)
希望这有帮助=)