でか文字表示ツールを作ってみよう2

   2012/07/08

JRE(あるいはJDK)として、提供されているクラスはたくさんあります。
最初から使いこなせるわけはないので、まずは、おっかなびっくりでも
動作確認プログラムを作って試しましょう。
その試した動作確認プログラムが、あなたの財産になります。

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

そのクラスを使う必要が生じた時には、その財産を引っ張り出して
改造すればよいのです。

さて、グラフィック(キャンバス)を使う例は、少し前に書いています。
決まり文句(雛形)を流用すると簡単
これを改造して、「でか文字」を表示するツールにしてゆきます。

まずは見た目を作成しましょう。操作に追随しない「はりぼて」です。

構成要素としては、「文字(Label)」「入力枠(TextField)」
「フォント選択(Choice)」「サイズ(Label)」「入力枠(TextFiled)」と
でか文字を表示する「キャンバス(Canvas)」です。

Choiceは、選択肢を add します。次のような感じですね。

Choice fsel=new Choice(); // フィールド

String [] fontlist={
		"Serif",
		"SansSerif",
		"Monospaced",
		"Meiryo",
		"MS Gothic",
		"MS Mincho",
		"Osaka",
		"VLgothic",
		"IPAGothic",
		"IPAMincho"
	};
for (int i=0;i<fontlist.length;++i){
	fsel.add(fontlist[i]);
}

LabelやTextFiledなどはPanelに詰め込んでBorderLayout.NORTHに、
Canvasは、BorderLayout.CENTERにセットします。

TextField ch,sz;  // フィールド

Panel p0=new Panel();
p0.add(new Label("文字"));
ch=new TextField("漢",4);
p0.add(ch);
p0.add(fsel);
p0.add(new Label("サイズ"));
sz=new TextField("300",4);
p0.add(sz);
this.add(p0,BorderLayout.NORTH);

でか文字をハリボテ的に表示するには、次のような感じです。

MyCanvas cv;  // フィールド

cv=new MyCanvas(800,400);
cv.g.setColor(Color.WHITE);
cv.g.fillRect(0, 0, gbWIDTH, gbHEIGHT);
cv.g.setFont(new Font(Font.SERIF,Font.PLAIN,300));
cv.g.setColor(Color.BLACK);
cv.g.drawString("漢", 0, 300);

全部まとめると、次のようになります。

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;

class BigFont1 extends Frame {
	private static final long serialVersionUID = 1L;
	final int gbWIDTH=800,gbHEIGHT=400;
	MyCanvas cv;
	Choice fsel=new Choice();
	TextField ch,sz;

	BigFont1() { // constructor
		String [] fontlist={
				"Serif",
				"SansSerif",
				"Monospaced",
				"Meiryo",
				"MS Gothic",
				"MS Mincho",
				"Osaka",
				"VLgothic",
				"IPAGothic",
				"IPAMincho"
			};
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent ev) {
				System.exit(0);
			}
		});
		this.setTitle("でか文字");
		cv=new MyCanvas(gbWIDTH,gbHEIGHT);
		this.add(cv,BorderLayout.CENTER);
		for (int i=0;i<fontlist.length;++i){
			fsel.add(fontlist[i]);
		}
		Panel p0=new Panel();
		p0.add(new Label("文字"));
		ch=new TextField("漢",4);
		p0.add(ch);
		p0.add(fsel);
		p0.add(new Label("サイズ"));
		sz=new TextField("300",4);
		p0.add(sz);
		this.add(p0,BorderLayout.NORTH);

		cv.g.setColor(Color.WHITE);
		cv.g.fillRect(0, 0, gbWIDTH, gbHEIGHT);
		cv.g.setFont(new Font(Font.SERIF,Font.PLAIN,300));
		cv.g.setColor(Color.BLACK);
		cv.g.drawString("漢", 0, 300);
		this.setSize(400,440);
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new BigFont1();
	}

	class MyCanvas extends Canvas {
		private static final long serialVersionUID = 1L;
		BufferedImage bi;
		Graphics g=null;
		MyCanvas(int ww,int hh) {
			bi=new BufferedImage(ww,hh,BufferedImage.TYPE_INT_RGB);
			g=bi.getGraphics();
		}

		@Override
		public void paint(Graphics g0){
			g0.drawImage(bi, 0, 0, null);
		}
	}
}

Choice(フォント名の部分)をクリックすると、プルダウンリストが出てきて
選択ができます(選択してもまだフォントは変わりません。ハリボテですから)。

次回は、実際に動作するようにしてみます。

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

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

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