幅の違う画像に対応しときましょう

Digit Maniaに登録されてる画像のほとんどは各数字・コロンの幅が同じ値ですが、なかには違うのもあります。そんなんにも対応しときましょう。いままでのアプレットでは
現在の時刻は です。
と表示されますが、対応後は
現在の時刻は です。
と表示されます。ソースはDigitalClock05.javaです。

paintメソッド中の各画像の表示位置を計算するところをかえれば良いです。こんな風に
    public void paint(Graphics g) {
        int imageWidth = 0;

        g.drawImage(digits[currentTime.get(Calendar.HOUR) / 10], imageWidth, 0, this);
        imageWidth += digits[currentTime.get(Calendar.HOUR) / 10].getWidth(this);

        g.drawImage(digits[currentTime.get(Calendar.HOUR) % 10], imageWidth, 0, this);
        imageWidth += digits[currentTime.get(Calendar.HOUR) % 10].getWidth(this);

        g.drawImage(digits[10], imageWidth, 0, this);
        imageWidth += digits[10].getWidth(this);

        g.drawImage(digits[currentTime.get(Calendar.MINUTE) / 10], imageWidth, 0, this);
        imageWidth += digits[currentTime.get(Calendar.MINUTE) / 10].getWidth(this);

        g.drawImage(digits[currentTime.get(Calendar.MINUTE) % 10], imageWidth, 0, this);
        imageWidth += digits[currentTime.get(Calendar.MINUTE) % 10].getWidth(this);

        g.drawImage(digits[10], imageWidth, 0, this);
        imageWidth += digits[10].getWidth(this);

        g.drawImage(digits[currentTime.get(Calendar.SECOND) / 10], imageWidth, 0, this);
        imageWidth += digits[currentTime.get(Calendar.SECOND) / 10].getWidth(this);

        g.drawImage(digits[currentTime.get(Calendar.SECOND) % 10], imageWidth, 0, this);
    }
まず最初に
    int imageWidth = 0;
でアプレットの一番左から描画を開始します。そして
    g.drawImage(digits[currentTime.get(Calendar.HOUR) / 10], imageWidth, 0, this);
で最初の数字の画像を表示して、
    imageWidth += digits[currentTime.get(Calendar.HOUR) / 10].getWidth(this);
getWidthで画像の幅を取得し、imageWidthにその値を加えて次の描画の開始位置を定めます。
以下同様にして幅の違う画像への対応終わり。

前の項目へ次の項目へ
「メイキング・オブ・DigitalClock」へ

最終更新日 : 1999年3月14日(日)

カメ飼ってます Valid HTML 4.0! Made with CSS midosabu@postpet.so-net.ne.jp