アスキーコード表(ascii table)を作成してみよう4

   2012/06/03

Javaで文字を表示するには、LabelやTextAreaなどを使う方法と
グラフィックで表示する方法があります。

毎度、管理人イガジーです。

今回は、グラフィックでアスキーコード表を作ってみましょう。
↓↓こんな感じのものです↓↓

グラフィックス g に対して、g.drawString(“文字列”,xpos,ypos);
という形で、文字が描画できます。
ここで、yposは、文字の「下端」の座標になります。ゆえに
g.drawString(“文字列”,0,0); としてしまうと、上にはみ出して見えない
という事になりますから注意しましょう。

では、プログラム例を示します。

/* output: Graphic
 */

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class asciiT6 {
	Frame f=new Frame("ascii Table");
	BufferedImage bi=new BufferedImage(340,160,BufferedImage.TYPE_INT_RGB);
	
	asciiT6(){
		f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent ev) {
                System.exit(0);
            }
        });
		MyCanvas cv=new MyCanvas();
		Graphics g=bi.getGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, bi.getWidth(), bi.getHeight());

		int xp=4,yp=4;
		g.setColor(Color.BLACK);
		g.setFont(new Font(Font.MONOSPACED,Font.PLAIN,14));
		f.add(cv,BorderLayout.CENTER);
		int a=' ';
		g.drawRect(xp, yp, 28, 20);
		g.drawString("HEX",xp+2,yp+15);
		xp+=28;
		for (int i=0;i<16;++i) {
			g.drawRect(xp, yp, 18, 20);
			g.drawString(String.format("+%X", i),xp+2,yp+15);
			xp+=18;
		}
		for (int j=0;j<6;++j){
			xp=4; yp+=20;
			g.drawRect(xp, yp, 28, 20);
			g.drawString(String.format("%02X", a),xp+6,yp+15);
			xp+=28;
			for (int i=0;i<16;++i){
				g.drawRect(xp, yp, 18, 20);
				if (a!=0x7F) g.drawString(String.format(" %c", a),xp-2,yp+15);
				xp+=18;
				++a;
			}
		}
		g.dispose();
		f.setSize(340,180);
		f.setVisible(true);
//		saveimg(bi,"asciitable.png");
	}
	void saveimg(BufferedImage b,String fname){
		String fext=fname.substring(fname.length()-3);
		File fn=new File(fname);
		try {
			ImageIO.write(b, fext, fn);
			System.out.println("saved "+fname);
		}catch (Exception e) {
			System.out.println("Write Error! "+fname);
		}
	}

	public static void main(String[] args) {
		new asciiT6();
	}
	class MyCanvas extends Canvas {
		private static final long serialVersionUID = 1L;
		@Override
		public void paint(Graphics g0){
			g0.drawImage(bi, 0, 0, null);
		}
	}
}

文字の周囲を、drawRectで囲っているので少し複雑に見えるかもしれません。

おまけで、画像データを保存する関数
saveimg(BufferedImage b,String fname) も入れておきました。
// saveimg(bi,"asciitable.png");を活かすとpngファイルで保存できます。
イメージファイルの保存は、この様にとても簡単です。
これも深く悩まずに、コピペで使ってください。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)