Javaアプレット(41) 画面のちらつき防止

GraphGo06では画面のちらつきがありましたが、GraphGo07 で解消しました。
画面のちらつきの原因は、描画の途中が見えてしまうためです。今回バッファ(buffer)を利用して、画面のちらつきを回避しました。バッファとは一時的にデータを蓄えるところです。
アプレットではなく、Javaプログラムの場合はJFrameという画面のクラスにcreateBufferStrategy()というメソッドがあって、バッファを扱うことができます。ところがJAppletにはこの機能がないため、Canvasというクラスを使いました。CanvasにもcreateBufferStrategy()メソッドが用意されています。
クラスCanvasは、Igo (プロジェクトBoardGame)のときに クラスLED を作る時にLEDのスーパークラスとして利用しました。そうすることで、LEDをJavaBeansの仕組みを使って部品化できました。今回も同様の考え方で、まだJavaBeansにはしていませんが、クラスGTable をCanvasのサブクラスにしました。そして、描画はアプレット側ではなく、クラス GTableの中で行うように変更しました。結果の画面が下図です。
図:GraphGo v0.7の画面
【図60 GraphGo v0.7の画面】
今回、机 (クラスGTable)のサイズと碁盤の路数をコンストラクタで変更できるようにして、ちょっとコンパクトにしてみました。前回お伝えした方法で、アプレットのサイズを、幅 640ピクセル、高さ 480ピクセルに変更してあります。
というようなわけで、AWTから脱却しSwingを使ってリッチなグラフィックスを…と考えていたのですが、なかなか思うようにはいきません。JFrameやJAppletはSwingのクラスですが、CanvasはAWTのクラスです。これだけならAWTのAppletを使えばSwingがなくても実現可能です。
リッチなグラフィックスといえば、Igoで使っていたGraphicsではなく、Graphics2Dを使うようにしています。Graphics2Dでは線の太さを変えたり、グラデーションでの塗りつぶしが可能です。が、まだ利用していません。今後、使う機会があれば紹介していきたいと思います。
(つづく)

カテゴリーJava

コメントを残す