- ベストアンサー
paint()メソッドが呼ばれない
swingを使って多角形を表示するプログラムを作成しています.polygonクラスを配列に格納して,順番に表示しているのですが,配列中のひとつのpolygonオブジェクトを削除して,再描画を行おうとして,repaint()で一旦画面をクリアして,その後my_paint()で配列中のpolygonを描画させようとしているのですが, ・ repaint(); my_paint(); ・ my_paint()メソッが呼ばれずに画面がクリアされた状態になってしまいます. どなたか,解決方法をご存知でしたら,ヒントでもいただけるとありがたいです.よろしくお願いします.
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんちわ、sohです えっと~~~ repaint()を呼び出したら 普通 paint(Graphics g) がシステムから呼び出されますけど そこへ画面の初期化処理を書いてるって事でしょうか? paint(Graphics g)はrepaint()メソッドを呼び出した時だけでなくシステムが画面のリフレッシュを必要とした時に勝手に呼ばれるので 多分 my_paint();で描画->ペイントし直そすためにシステムがrepaint()を呼ぶ -> paint(Graphics g)が呼ばれる->画面が初期化される ってシーケンスになっちゃってるのでは? ところで my_paint()の方で画面初期化を行わなかった理由って何かあるんでしょうか? 無いのでしたら my_paint()の方で画面の初期化はおこなって my_paint(); repaint(); の順で呼び出したらいーんでないでしょうか? もしくはmy_paint()が本当に呼ばれているか System.out.println(); を埋め込んで調べてみて下さい。 ほいではでは。
その他の回答 (1)
- tenro-
- ベストアンサー率32% (23/70)
swingには詳しくないのですが、何かExceptionは出てないですか? また、デバッガでステップ実行とかなさいました? まずはそちらの確認でしょう。
お礼
回答ありがとうございます. Exceptionは,拾うようにプログラムしていたのですが,特になくて,困ってました. ただ,Exceptionを最初に見ることは,重要ですよね.
お礼
ありがとうございました. my_paint()の中で画面の初期化を行わなかったのは,初期化すると画面が少しちらついたので,行っていませんでした. おっしゃるとおり,my_paint()の中で,初期化(update())を呼ぶことで思ったように実行することができました.ただ,ちらつきが起こるので,実際には,消去したいpolygonオブジェクトの処理の中で,update()とmy_paint()を呼ぶことで,きれいに消すことができました. 本当にありがとうございました.