我在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);
答案 0 :(得分:6)
在写这个问题时,我偶然发现了答案。 我来电话
super.paintComponent(g);
在paintComponnent()方法的开头是解决方案。因为它清除了里面某处的图像。
清除图像的super.paintComponent(g)中的代码如下:
g.setColor(c.getBackground());
g.fillRect(0, 0, c.getWidth(),c.getHeight());
如果我把它代替super.paintComponent - 它也可以。我只需要在填充矩形之前不要设置自己的颜色。