2007 年 2 月 18 日 23 時 57 分

VNC 時計


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


描画のサンプルとしてはもってこいということで、
簡単なアナログ時計を表示する VNC サーバを作ってみる。

RFBCanvas を使えば、通常の GUI を作るのと同じ感覚で、
RFB サーバとして動作させることができる。

時計の状態は、秒単位で刻一刻と変化するため、
画面の描画は、描画システムの要求があった場合に限らず、
定期的に repaint を呼んで更新を行わなければならない。

ということで、基礎の部分を作ってみよう。

========== ClockCanvas.java ==========

package jp.loafer.rfbdemo;

import java.awt.Graphics2D;
import java.util.Timer;
import java.util.TimerTask;

import jp.loafer.rfb.message.PixelFormat;
import jp.loafer.rfb.server.RFBCanvas;

/**
* ClockCanvas クラス。
* @author kes
*/
public class ClockCanvas extends RFBCanvas {

    /**
     * {@link ClockCanvas} のインスタンスを作成。
     * @param width 画面の幅。
     * @param height 画面の高さ。
     * @param name 画面の名前。
     */
    public ClockCanvas(int width, int height, String name) {
        this(width, height, name, null);
    }

    /**
     * {@link ClockCanvas} のインスタンスを作成。
     * @param width 画面の幅。
     * @param height 画面の高さ。
     * @param name 画面の名前。
     * @param defaultPixelFormat 画面の既定の画素形式。
     */
    public ClockCanvas(int width, int height, String name,
            PixelFormat defaultPixelFormat) {
        super(width, height, name, defaultPixelFormat);

        Timer t = new Timer(true);
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                repaint();
            }
        }, 1000, 1000);

    }

    /**
     * @see RFBCanvas#paint(Graphics2D)
     */
    @Override
    protected void paint(Graphics2D g) {

        // 時計の描画

    }

}

========== end of ClockCanvas.java ==========

定期的に repaint を呼ぶためには、
タイマーを作って repaint を呼び出し、
描画システムから update を発生させれば良い。

update は paint を呼び出すため、
特別な処理が不要なら、paint をオーバーライドするだけだ。

さて、RFB ではクライアントの要求がない限り、
サーバから勝手にデータを送る事ができないので、
描画要求に対して RFBCanvas がバッファ処理を行っている。
なので、この辺が正常に動作しているかのテストにもなる。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.