2010-11-03 47 views
2

我有一个JPanel,它可以绘制.png图像。每个图像都有2个副本来表示它是否被选中。一个图像是正常的,一个图像有一个彩色边框来表示已经做出选择。 (您可以将这些图像视为简单的形状以便参数)paintComponent()在重绘后留下先前绘制的图像()

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

一般来说,这是工作,但是在repaint()后,图像的突出显示版本被留下。由于突出显示的版本比正常版本稍大,因此您可以看到它突出显示在新绘制的正常图像后面(重叠)。

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

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

此外,如果有一个更简单的方法来实现所有这些,请让我知道,制作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

如何让我重画()摆脱其目前绘制的图像,并从头开始。

你的意思是,如何在绘画之前用它的背景颜色进行重绘填充组件?加入怎么样

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

paintComponent()之上?

+0

不错!爱得简单修复。 – Koop 2010-11-03 07:33:11