JComponent
のサブクラスでは、描画するメソッドをオーバーライドします。paintComponent
オーバーライドされたメソッドが最初に行うことは、ほとんどのテキストでこれを行うように指示するので、super.paintComponent
を呼び出すことです。これは、他のJComponents
が自分自身をペイントできるようにするために必要であると言う人もいます。しかし、スーパーメソッドを呼び出すと、イメージがクリアされ、背景色で塗りつぶされます。私はこれが起こることを望んでいない。私はスーパーメソッドを呼び出すスキップした場合、私は私が再描画する前に画像をクリアするためにsuper.paintComponentがclearRectを呼び出さないようにする
g.setColor(getBackground());
g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
を呼び出したいかどうかを選択して自由にしています。
しかし、私はスーパーメソッドをスキップすることによって、スーパーメソッドが行う他の重要な操作をスキップすることを心配しています。他の重要な操作が実行されていることを確認しながら、イメージをクリアするかどうかを選択できるようにするにはどうすればよいですか?
EDIT:
はここに私のpaintComponentです:それはちょうど、ユーザーがマウスをドラッグした場所にマウスボタンを押したところから線を描画
public void paintComponent(Graphics g) {
super.paintComponent(g); // necessary so other panels can paint themselves.
// g.setColor(getBackground());
// g.fillRect(0, 0, getWidth(), getHeight());
// g.setColor(Color.black);
if (down) {
g.drawLine(downX, downY, currentX, currentY);
}
}
。マウスがドラッグすると、行が移動します。マウスが放されると、何も描画されません。
これはそのままです。マウスが放されると、プログラムはユーザーが描画している線を消去します。私はそのプログラムにそれが行こうとするようなことはしません。
現在の問題について詳しく教えてください。あなたのプログラムがそのまま動作している理由はまだわかりません。 'paintComponent'メソッド全体を表示できますか? –