Javaでの実装

1.方針

このページでは、具体的にJava を利用して、プログラムを作成し、実行して、計算尺のイメージを作成します。Sun のJavaであり、MicrosoftのVisual J#.NETではないのでご注意ください。

Javaでは、コマンドプロンプト上で動作するプログラムとして作成するので、Formの作成はありません。

2.コード

クラス名は何でもかまいませんが、ここではSlideRuleMakerとしておきましょう。

Java

import java.awt.*;
import java.util.*;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class SlideRuleMaker
{
    public static void main(String[] args)
    {
        BufferedReader br = null;
        try
        {
            Vector v = new Vector();
            String s;
            String openFileName = "D:\\Excel.csv";
            String saveFileName = "D:\\image.png";
            String[] line;
            int i;
            int length;
            int place;
            BufferedImage myImage;
            Graphics2D myGraphics;
            br = new BufferedReader(new InputStreamReader(new FileInputStream(openFileName), "UTF-8"));

            while((s = br.readLine()) != null)
            {
                v.add(s);
            }

            myImage = new BufferedImage(1000, 100, BufferedImage.TYPE_INT_RGB);
            myGraphics = myImage.createGraphics();
            myGraphics.setColor(Color.WHITE);
            myGraphics.fillRect(0,0,1000,100);
            myGraphics.setColor(Color.BLACK);

            for(i = 0; i <= v.size() - 1; i++)
            {
                line = ((String)v.get(i)).split(",");
                length = Integer.parseInt(line[2]);
                place = (int)(Float.parseFloat(line[1]) * 900 + 50);
                switch (length)
                {
                    case 1:
                    {
                        myGraphics.drawLine(place,45,place,55);
                        break;
                    }
                    case 2:
                    {
                        myGraphics.drawLine(place,40,place,60);
                        break;
                    }
                    case 3:
                    {
                        myGraphics.drawLine(place,35,place,65);
                        break;
                    }
                    default:
                    {
                        throw new Exception("長さとして不適切な値が設定されました。\n" + s);
                    }
                }
            }

            ImageIO.write(myImage, "png", new File(saveFileName));
            System.out.println("終了しました。");

        }
        catch (Exception ex)
        {
            System.out.println(ex.getMessage());
        }
        finally
        {
            try
            {
                br.close();
            }
            catch (Exception ex)
            {
            }
        }
    }
}

最終的に完了したファイルを公開しておきます。

3.解説

3.1.ファイルの読み取り

今回は、あらかじめ、すべての行を1行ずつ、Vectorに保存しておきます。

ファイル名が"D:\\Excel.csv"となっているのは"D:\Excel.csv"の間違いではなく、エスケープ文字として判別されるためです。

Java

            Vector v = new Vector();
            String s;
            String openFileName = "D:\\Excel.csv";

            br = new BufferedReader(new InputStreamReader(new FileInputStream(openFileName), "UTF-8"));

            while((s = br.readLine()) != null)
            {
                v.add(s);
            }

3.2.イメージの作成

イメージの裏面を白色で塗り、次で利用するために黒色にセットしておきます。

Java


            BufferedImage myImage;
            Graphics2D myGraphics;

            myImage = new BufferedImage(1000, 100, BufferedImage.TYPE_INT_RGB);
            myGraphics = myImage.createGraphics();
            myGraphics.setColor(Color.WHITE);
            myGraphics.fillRect(0,0,1000,100);
            myGraphics.setColor(Color.BLACK);

3.3.メモリの絵画

一行分をコンマで分割して、配列に代入します。場所は配列の1, 長さは配列の2に格納されています。

switch構文で長さによって分類し、それぞれにおいて指定された長さでメモリを刻んでいきます。その際、長さが1, 2, 3以外であった場合は、例外を投げます。

Java


            String[] line;
            int i;
            int length;
            int place;

            for(i = 0; i <= v.size() - 1; i++)
            {
                line = ((String)v.get(i)).split(",");
                length = Integer.parseInt(line[2]);
                place = (int)(Float.parseFloat(line[1]) * 900 + 50);
                switch (length)
                {
                    case 1:
                    {
                        myGraphics.drawLine(place,45,place,55);
                        break;
                    }
                    case 2:
                    {
                        myGraphics.drawLine(place,40,place,60);
                        break;
                    }
                    case 3:
                    {
                        myGraphics.drawLine(place,35,place,65);
                        break;
                    }
                    default:
                    {
                        throw new Exception("長さとして不適切な値が設定されました。\n" + s);
                    }
                }
            }

3.4.保存と終了の表示

ImageIO.writeメソッドを利用して、保存します。また、終了を知らせます。

Java

            String saveFileName = "D:\\image.png";

            ImageIO.write(myImage, "png", new File(saveFileName));
            System.out.println("終了しました。");

3.5.エラー処理

今回は自分で利用するだけなので、詳細なエラー処理をする必要はないでしょう。そこで全体をtry catch構文で囲っておき、エラーを表示させます。

Java


        try
        {

        }
        catch (Exception ex)
        {
            System.out.println(ex.getMessage());
        }
        finally
        {

        }

4.実行

では、実行してみましょう。前のページで作成した.csvファイル名と、保存する.gifファイル名をコード内で指定して実行すると、.pngファイルが作成されます。横の長さを半分にしたものを載せておきます。

後は、このイメージを少し加工します。

5.尺の名前と数字の追加

このイメージに、「C」と「D」という尺の名前と、「1」~「10」の数字を追加します。

「スタート」→「すべてのプログラム」→「アクセサリ」→「ペイント」でペイントを起動します。「ファイル」メニュー→「開く」から、先ほど作成した.gifファイルを開きます。

「ツールボックス」の「テキスト」を利用して、「C」と「D」という尺の名前と、「1」~「10」の数字を追加してください。完了したものは次のような感じです。ただし、横幅は半分にしてあります。

また、C尺とD尺の境目の直線を追加してください。

6.印刷と工作

後は、おなじみの方法です。これを印刷して、切り貼りしてください。詳しい方法は計算尺のイメージからの作成をご覧ください。