2010-05-05

RhinoでJavaのCanvasに描画したいと思った

さすがに描画処理(paintメソッド)のリスナーインタフェースは見当たらなかったので、Javaのソースファイルに以下のようなクラスを書いて、コンパイルしておく。
/** 自作キャンバス */
public class MyCanvas extends JPanel {
    /** オフスクリーンバッファに描画するためのオブジェクト */
    private Graphics backGraphics;
    /** キャンバスを作成する */
    public MyCanvas() {
        super(false);  // JPanel提供のダブルバッファリングは使わない
    }
    /** オフスクリーンバッファに描画するためのオブジェクトを返す */
    public Graphics getBackGraphics() {
        return backGraphics;
    }
    //...以下略
    // backGraphicsを初期化する処理が必要
}
後は、Rhinoのスクリプトでオフスクリーンバッファへ描画してから repaint() で自作キャンバスを再描画する。

上のソースはbackGraphicsを初期化する処理が抜けていて、今回は古いやり方に従って描画メソッド(JPanelなのでpaintComponentメソッド)が初めて呼び出された時だけcreateImage()でオフスクリーンバッファ(と、そのGraphicsオブジェクト)を作成するようにした。
Javaは「Compatibleな」オフスクリーンバッファを作るメソッド、というのが幾つもあるのだけれど、いまいち最適な使い方が分からない。