でか文字表示ツールを作ってみよう2
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(フォント名の部分)をクリックすると、プルダウンリストが出てきて
選択ができます(選択してもまだフォントは変わりません。ハリボテですから)。
次回は、実際に動作するようにしてみます。
この記事へのコメントはこちら