アスキーコード表(ascii table)を作成してみよう4
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ファイルで保存できます。
イメージファイルの保存は、この様にとても簡単です。
これも深く悩まずに、コピペで使ってください。
この記事へのコメントはこちら