1

Retina ディスプレイと互換性を持たせるために、paintComponent(Graphics g) メソッドで画像を描画しています。

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

paintComponent() メソッドの冒頭に解決策がありました。内部のどこかで画像をクリアするからです。

画像をクリアする super.paintComponent(g) のコードは次のとおりです。

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

super.paintComponent の代わりに配置すると、それも機能します。長方形を塗りつぶす前に自分の色を設定する必要はありませんでした。

于 2013-05-01T14:40:41.977 に答える