1

我在 paintComponent(Graphics g) 方法中绘制图像,以使它们与 Retina 显示器兼容

g.drawImage(image, 0, 0, imageWidth/2, imageHeight/2, null);

一切正常,但图像的阴影相互叠加。它使画面难看。所以我需要在绘制新图像之前清除图像。问题来了:

我清除图像没有问题,但问题是防止父元素的背景重叠。现在它看起来像这样http://cl.ly/image/0K1u0q2M150W

我使用了其他主题的方法:

g2d.setBackground(new Color(255,255,255,0));
g2d.clearRect(0, 0, ICON_WIDTH, ICON_HEIGHT);

g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR));
g2d.setBackground(new Color(255,255,255,0));
g2d.clearRect(0, 0, ICON_WIDTH, ICON_HEIGHT);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));

和其他几个。

这就是它应该看起来像http://cl.ly/image/2V1R1v0X452N 这就是它在多次调用 repaint() 方法后的样子。我需要调用它来将图像从一个更改为另一个。

我的paintComponent方法:

Image image;
if (flag) {
    image = image1;
} else {
    image = image2;
}

g2d.drawImage(image, 0, 0, IMAGE_SIZE, IMAGE_SIZE, null);
4

1 回答 1

6

在写这个问题时,我无意中找到了答案。为我打电话

        super.paintComponent(g);

在paintComponnent() 方法的开头是解决方案。因为它清除了内部某处的图像。

super.paintComponent(g) 中清除图像的代码如下:

g.setColor(c.getBackground());
g.fillRect(0, 0, c.getWidth(),c.getHeight());

如果我把它代替 super.paintComponent - 它也可以。在填充矩形之前,我只需要不设置自己的颜色。

于 2013-05-01T14:40:41.977 回答