2012-03-04 3 views
0

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

。マウスがドラッグすると、行が移動します。マウスが放されると、何も描画されません。

これはそのままです。マウスが放されると、プログラムはユーザーが描画している線を消去します。私はそのプログラムにそれが行こうとするようなことはしません。

+0

現在の問題について詳しく教えてください。あなたのプログラムがそのまま動作している理由はまだわかりません。 'paintComponent'メソッド全体を表示できますか? –

答えて

-1

あなたが安全に、スーパー()の呼び出しをスキップしたりJComponent's setOpague()

幸運をfalseに不透明に設定することができます!

+0

setOpaque(false)が機能しません。私はこのコンポーネントのコンストラクタに追加しました。今ではまだ描画されているものは消去されますが、背景色はありません。画面を透明な色にクリアしているかのようです。 – Croolsby

+0

そして* paintControl(Grahpics)*の代わりに* paint(Graphics)*をオーバーライドしようとすると?それはあなたが達成しようとしていることに応じて動作するかもしれません。 – Wesley

+0

それは動作しませんでした。 'paintComponent'をオーバーライドしなければ、コンポーネントは自動的にスーパーメソッドを呼び出します。これは、描画されたすべてを消去するように思えるからです。 – Croolsby

関連する問題