2

.png画像を描画するJPanelがあります。各画像には、選択されているかどうかを示す2つのコピーがあります。1つの画像は正常で、もう1つの画像には、選択が行われたことを示す色付きの境界線があります。(これらの画像は、議論のために単純な形と考えることができます)

描画される画像のバージョンは、MouseListenersを介して決定されます。ユーザーがimage1を選択すると、image1は強調表示されたバージョンを表示します。

通常、これは機能していますが、repaint()を実行すると、強調表示されたバージョンの画像が残されます。ハイライトされたバージョンは通常のバージョンよりもわずかに大きいため、新しく描画された通常の画像の後ろに突き出ている(オーバーラップしている)ことがわかります。

repaint()は現在の図面を完全に破棄し、最初から開始することになっていると思いましたが、ここではそうではないようです。以下は一般的な考え方です。blackClickedはMouseListener内で切り替えられます。

だから私の質問は、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);
}
4

1 に答える 1

1

repaint()で現在描画されている画像を削除し、最初から開始するにはどうすればよいですか。

つまり、ペイントする前に、コンポーネントを背景色で塗り替える方法を教えてください。追加してみませんか

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

上にpaintComponent()

于 2010-11-03T07:30:01.127 に答える