paintComponent()在重绘()后留下先前绘制的图像

时间:2010-11-03 07:22:06

标签: java swing repaint paintcomponent

我有一个绘制.png图像的JPanel。每个图像有2个副本,表示它是否已被选中。一个图像是正常的,一个图像是彩色边框,表示已经进行了选择。 (为了论证,您可以将这些图像视为简单的形状)

通过MouseListeners确定绘制的图像版本。如果用户选择image1,则image1将显示其突出显示的版本。

一般情况下这是有效的,但是在重绘()时,图像的突出显示版本会被遗忘。由于突出显示的版本略大于普通版本,因此您可以看到它在新绘制的普通图像后面(重叠)。

我认为repaint()应该完全处理当前的图纸并从头开始,这似乎不是这里的情况。下面是一般的想法,blackClicked在MouseListener中切换。

所以我的问题是如何使repaint()摆脱当前绘制的图像并从头开始。

另外,如果有更简单的方法可以实现所有这一切,请告诉我,制作2份图像是一项繁琐的工作。

@Override
public void paintComponent(Graphics g){

    Graphics2D g2 = (Graphics2D) g;

    if(blackClicked)
        g2.drawImage(blackSelected,0, 0, null);
    else
        g2.drawImage(black,0, 0, null);

    g2.drawImage(green,0, 0, null);
}

1 个答案:

答案 0 :(得分:1)

  

如何使repaint()摆脱当前绘制的图像并从头开始。

你的意思是,在绘画之前如何使用它的背景颜色重新填充组件?如何添加

g2.setColor(getBackground());
g2.fillRect(0, 0, getWidth(), getHeight());

位于paintComponent()的顶部?