- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SwingのアプリケーションでのpaintComponentによる処理について)
SwingのアプリケーションでのpaintComponentによる処理について
このQ&Aのポイント
- javaを学習している者です。マウスがクリックされたところを赤い四角を描画して、その前にクリックされて描画されていた赤い四角は同時に消える処理を実装したいのですが、うまくできず、赤い四角が残ってしまいます。
- プログラムはpaintComponent(Graphics g)の中で、クリックされた場所で赤い四角を描画する処理だけ実装していて、マウスがクリックされるたび、mouseClicked(MouseEvent e)の中でrepaint()を呼ぶ、という風に書いているのですが、どう変えればうまくいくでしょうか?
- 前に勉強していたアプレットではこのような感じで出来たと思うのですが・・・。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#49664
回答No.1
これだけですと、なんとも正確なところはわからないのですが・・・。 paintComponentによる描画は、AWTのpaintによる描画などと比べるとより厳格な書き方が要求されます。 1.まず、他のコンテナ類でpaintがオーバーライドされていないこと。オーバーライドされている場合は、superにpaintが送られているかどうか。paintComponentは、paintが送られた後でそれぞれのコンテナから内包するコンポーネントに送られるため、paintが止まってしまうとうまく機能しません。 2.同様に、updatはオーバーライドされていないかどうか。 3.paintComponentでは、super.paintComponentされているかどうか。 4.paintComponent内では、コンポーネント内を一度クリアして(背景色で全体を塗りつぶす)から描画しているかどうか。これをしないと、前のイメージが残った状態のまま新たな描画がされます。 ざっと、これらについて確認をしてみてください。
お礼
回答ありがとうございます。あいまいな質問文ですみません。自分でも原因がよく分からないもので・・・。 どうやら「4」に当てはまりそうです。背景色で塗りつぶす処理を加えてみようと思います。