图形不在油漆组件(图形)中绘制



我正在为我的应用程序开发一个自定义的 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)

希望这有帮助=)

相关内容

  • 没有找到相关文章

最新更新