2013-05-01 62 views
1

我繪製圖像中的paintComponent(圖形G)方法透明背景的圖像清晰顯示,以便使它們與視網膜相兼容的Java

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); 

回答

6

在寫這個問題,我無意中發現了答案。 對我來說,在paintComponnent()方法的開頭調用

 super.paintComponent(g); 

是解決辦法。因爲它會清除內部某處的圖像。

從super.paintComponent方法(G)的代碼,清除圖像如下:

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

如果我把它,而不是super.paintComponent方法 - 它也適用。我只需要在填充矩形之前不要設置自己的顏色。

+0

因爲你不能投票自己賴特答案,我會爲你做! :) – SeniorJD 2013-05-01 14:58:50

相關問題