Javaで使えるフォント名を取得する方法
Javaが目指しているのは、Write once, run anywhere
すなわち、書いたプログラムは(作り直さなくとも)あらゆる環境で
(WindowsでもMACでもLinuxでも携帯でも)動くということです。
毎度、当サイト管理人のイガジーです。
Javaが動く環境なら皆同じと言えるか?というと、現実には細かな違いが
出てきます。その中でも目立つのは、フォントの違いでしょう。
(ブラウザやpdf文書でも、フォントの違いは悩みです)
論理フォントだけではイマイチなので、自分専用と割りきって
きれいなフォントを使いたいこともあるでしょう。
Javaで使えるフォントを調べるには
Font [] fonts=GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
とすると、配列が得られるので
fonts[i].getName();
でフォント名が得られます。
実際に、そうやって得られたフォント名を見てみると、
Monospaced.bold
Monospaced.bolditalic
Monospaced.italic
Monospaced.plain
というようなものが出てくるので、boldやitalicなどは削除した方がよいですね。
また、日本語が表示できないフォントは除去したいこともあるでしょう。
日本語が表示できるかどうかは、Font.canDisplay(‘漢’) で分かるようです。
(’漢’でなくとも’あ’でも良い)
という訳で、フォントリストを表示するプログラム例を掲載しておきます。
import java.awt.Font;
import java.awt.GraphicsEnvironment;
public class FontsList {
Font [] fonts=GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
FontsList(String as[]){
char dspchr=0;
int fnumber=fonts.length;
int sp,n=0;
if (as.length>0) dspchr=as[0].charAt(0);
for (int i=0;i<fnumber;++i){
if (dspchr!=0) {
if (!fonts[i].canDisplay(dspchr)) continue;
}
// if (!fonts[i].canDisplay('A')) continue;
String fns=fonts[i].getName();
if (-1!=fns.indexOf("bold")) continue;
if (-1!=fns.indexOf("Bold")) continue;
if (-1!=fns.indexOf("italic")) continue;
if (-1!=fns.indexOf("Italic")) continue;
if (-1!=fns.indexOf("イタリック")) continue;
if (-1!=fns.indexOf("ボールド")) continue;
sp=fns.indexOf(".plain");
if (-1!=sp) fns=fns.substring(0,sp);
sp=fns.indexOf(" Regular");
if (-1!=sp) fns=fns.substring(0,sp);
sp=fns.indexOf("-Regular");
if (-1!=sp) fns=fns.substring(0,sp);
System.out.println(fns);
++n;
}// end for
System.out.println(String.format("\n# Number of fonts=%d/%d", n,fnumber));
}
public static void main(String[] args) {
new FontsList(args);
}
}
Eclipse上で走らせるとConsole(コンソール)エリアに
ずらずらとフォント名が表示されます。
Run configurations で Arguments に「漢」とか「あ」を入れると
日本語が表示されるものだけになります。
Eclipseを使いたくない人は、jar にして、コマンドプロンプトなどで
java -jar fontslist.jar 漢
などと、入力して動かしてください。
この記事へのコメントはこちら