0

我正在为我的应用程序开发一个自定义 Swing 组件,并开始使用public void paintComponent(Graphics g). 除了我无法绘制任何矩形之外,一切都很好。我认为问题出在getX()andgetY()部分,但我不确定。这是我的代码:

@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),这就是我正在做的。

其余的绘图工作完美,但我不明白为什么这不是绘图。有什么建议么?

4

1 回答 1

3

我不确定您的Component是如何定义的,但Component方法的默认值是Component左上角的 X 坐标(相对于根 Component )getX()

当您在 Swing 中使用Component的方法进行绘制时,您要绘制到的GraphicspaintComponent(Graphics)上下文的原点通常位于Component本身的左上角,而不是根Component

所以通过这个调用:

g.fillRect(getX(), getY(), getWidth(), getHeight());

您可能正在Component的剪辑边界之外绘制矩形!

(例如,如果组件位于 100、100 并且它的宽度为 20,高度为 20,那么您正在绘制的矩形,在绝对坐标中,位于(200, 200)to (220, 220)

如果你想绘制一个包含整个组件的矩形,你可能想尝试更多这样的东西:

g.fillRect(0, 0, getWidth(), getHeight());

这将从原点(同样,可能是组件的左上角)向下绘制到组件的宽度和高度。

(使用前面的示例:组件位于 100、100 和 20 的宽度/高度,这将绘制的矩形位于(100, 100)to (120, 120)

希望这会有所帮助=)

于 2012-05-23T22:55:35.100 回答