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

绘制哪个版本的图像是通过慕斯列依者确定的。如果用户选择Image1,则Image1将显示其突出显示版本。

总的来说,这是有效的,但是在Repaint()上,图像的突出显示版本被遗留在后面。由于突出显示的版本比普通版本稍大,因此您可以看到它在新绘制的正常图像(重叠)后面伸出。

我认为Repaver()应该完全处理当前的图纸并从头开始,在这里似乎并非如此。以下是一般的想法,在慕斯语中切换了黑色观点。

因此,我的问题是如何使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);
}
有帮助吗?

解决方案

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

您的意思是,如何使重新粉刷在绘画之前用其背景颜色填充组件?添加怎么样

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

在顶部 paintComponent()?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top