Nanashi-soft○プログラマ専用○Javaアプリケーション○
◎なぜ画面が点滅するのか?
スレッドの説明時に,無限ループを作って連続で画面描画を行うと,ほら点滅するでしょうと書きました
それじゃダメじゃんか! と思いませんか?
同じ場所に同じものを描画し続けているので,静止して表示されていなければなりません
Canvasクラスの
g.drawString("Hello World", 16, 16);
を
g.fillRect(0,0,240,240);
に変えてみて下さい
これをビルドして実行すると,画面に白黒の縞模様が表示されます
黒く塗りつぶしているはずなのに,白が見えると言うことは,何者かが白く塗りつぶす処理を行っていると予想できます
◎回避方法
repaintメソッドを発行すると,画面を白く塗りつぶしてから,描画が行われます
これを回避する方法は無いでしょうか?
まず,仕組みを理解する必要があります
repaintメソッド → updateメソッド → paintメソッド
の順で処理が行われます
この updateメソッドに画面をバックグラウンドカラーで塗りつぶす命令が記述されているものと考えます
そこで,updateメソッドを自分で記述して乗っ取ります
static class fstCanvas extends Canvas{ public void paint(Graphics g){ g.drawString("Hello World", 16, 16); g.fillRect(0,0,240,240); } //updateメソッドを自分で記述 public void update(Graphics g){ paint(g); } }
これをビルドして実行すると,真っ黒な画面が表示されます
もう瞬いていません
このように Canvasクラスには,updateメソッドも記述するものだと言う認識でいると良いと思います