先の対処で実行時エラーは解消して,絵が表示されるようになったものの,今度は日本語部分が文字化け.(Windows環境下では問題なかったのに…)
g.drawString()とかで表示する日本語部分が→「□□□」みたいな感じに化けてしまう.
原因は,linuxデフォルトのフォントが日本語に対応していないからというもの.
よーするに,Graphicsオブジェクトに対して,どのFontを使うかを明示的に指定しないとダメなのでした.(WindowsではたまたまデフォルトのFontが日本語に対応していただけのハナシ)
指定しない場合はその実行環境デフォルトのFontが採用されてしまう.
というわけで,
- その実行環境で対応しているFont一覧を取得
- それらのうち日本語表示に対応しているものを見つける
- 日本語に対応したFontをGraphicsオブジェクトに指定する
という手順を踏まねばならない.
サンプルは以下のとおり,
(前略)
//インストールされている全てのFontを取得
Font[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); //その中から日本語に対応したものを抽出
ArrayList fontList = new ArrayList();
for(int i = 0; i < fonts.length; i++){
if(fonts[i].canDisplay('日')){
fontList.add(fonts[i]);
}
}
//抽出したFontの中に、MS Gothic(Windowsならたいていあるはず)が入っていればそれを採用,
//なければ「Kochi Gothic」(linuxに入っている)を採用
//それもなければ,何でもいいから日本語に対応しているFontを採用
Iterator itr = fontList.iterator();
while(itr.hasNext()){
Font f = (Font)itr.next();
if(f.getName().equals("MS Gothic")){
g.setFont(new Font(f.getName(), Font.PLAIN, 12));
break;
} else if (f.getName().equals("Kochi Gothic")){
g.setFont(new Font(f.getName(), Font.PLAIN, 12));
break;
} else {
g.setFont(new Font(f.getName(), Font.PLAIN, 12));
}
}
(後略)
これはあくまでもサンプルで,これやるとちょっと処理時間がかかる….
参考までに,手元の環境(WinXP / linux)が対応していたFontと日本語表示対応状況を調べてみたので,その一覧を載せます.
Windows XP SP2の場合 |
RedHat Linux ES4の場合 |
Font名 | 日本語対応状況 |
Arial | false |
Arial Black | false |
Arial Cursiva | false |
Arial Negreta | false |
Arial Negreta cursiva | false |
Batang | true |
BatangChe | true |
Bitstream Vera Sans | false |
Bitstream Vera Sans Bold | false |
Bitstream Vera Sans Bold Oblique | false |
Bitstream Vera Sans Mono | false |
Bitstream Vera Sans Mono Bold | false |
Bitstream Vera Sans Mono Bold Oblique | false |
Bitstream Vera Sans Mono Oblique | false |
Bitstream Vera Sans Oblique | false |
Bitstream Vera Serif | false |
Bitstream Vera Serif Bold | false |
Comic Sans MS | false |
Comic Sans MS Negreta | false |
Courier New | false |
Courier New Cursiva | false |
Courier New Negreta | false |
Courier New Negreta cursiva | false |
Dotum | true |
DotumChe | true |
Estrangelo Edessa | false |
Franklin Gothic Medium | false |
Franklin Gothic Medium Cursiva | false |
Gautami | false |
Georgia | false |
Georgia Cursiva | false |
Georgia Negreta | false |
Georgia Negreta cursiva | false |
Gulim | true |
GulimChe | true |
Gungsuh | true |
GungsuhChe | true |
Impact | false |
Kartika | false |
Latha | false |
Lucida Bright Demibold | false |
Lucida Bright Demibold Italic | false |
Lucida Bright Italic | false |
Lucida Bright Regular | false |
Lucida Console | false |
Lucida Sans | false |
Lucida Sans Demibold | false |
Lucida Sans Regular | false |
Lucida Sans Typewriter Bold | false |
Lucida Sans Typewriter Regular | false |
Lucida Sans Unicode | false |
Lucida Sans halvfed | false |
Lucida Sans halvfed kursiv | false |
Lucida Sans kursiv | false |
MS Gothic | true |
MS Mincho | true |
MS PGothic | true |
MS PMincho | true |
MS UI Gothic | true |
MV Boli | false |
Mangal | false |
Marlett | false |
Microsoft Sans Serif | false |
NSimSun | true |
OpenSymbol | false |
Palatino Linotype | false |
Palatino Linotype Cursiva | false |
Palatino Linotype Negreta | false |
Palatino Linotype Negreta cursiva | false |
Raavi | false |
Shruti | false |
SimHei | true |
SimSun | true |
Sylfaen | false |
Symbol | false |
Tahoma | false |
Tahoma Negreta | false |
Times New Roman | false |
Times New Roman Negreta | false |
Times New Roman Negreta cursiva | false |
Times New Roman cursiva | false |
Trebuchet MS | false |
Trebuchet MS Cursiva | false |
Trebuchet MS Negreta | false |
Trebuchet MS Negreta cursiva | false |
Tunga | false |
Verdana | false |
Verdana Cursiva | false |
Verdana Negreta | false |
Verdana Negreta cursiva | false |
Vrinda | false |
Webdings | false |
Wingdings | false |
dialog.bold | true |
dialog.bolditalic | true |
dialog.italic | true |
dialog.plain | true |
dialoginput.bold | true |
dialoginput.bolditalic | true |
dialoginput.italic | true |
dialoginput.plain | true |
monospaced.bold | true |
monospaced.bolditalic | true |
monospaced.italic | true |
monospaced.plain | true |
sansserif.bold | true |
sansserif.bolditalic | true |
sansserif.italic | true |
sansserif.plain | true |
serif.bold | true |
serif.bolditalic | true |
serif.italic | true |
serif.plain | true |
新細明體 | true |
細明體 | true |
|
Font名 | 日本語対応状況 |
Kochi Gothic | true |
Kochi Mincho | true |
Lucida Bright Demibold | false |
Lucida Bright Demibold Italic | false |
Lucida Bright Italic | false |
Lucida Bright Regular | false |
Lucida Sans Demibold | false |
Lucida Sans Demibold Oblique | false |
Lucida Sans Oblique | false |
Lucida Sans Regular | false |
Lucida Sans Typewriter Bold | false |
Lucida Sans Typewriter Bold Oblique | false |
Lucida Sans Typewriter Oblique | false |
Lucida Sans Typewriter Regular | false |
dialog | false |
dialog.bold | false |
dialog.bolditalic | false |
dialog.italic | false |
dialoginput | false |
dialoginput.bold | false |
dialoginput.bolditalic | false |
dialoginput.italic | false |
monospaced | false |
monospaced.bold | false |
monospaced.bolditalic | false |
monospaced.italic | false |
sansserif | false |
sansserif.bold | false |
sansserif.bolditalic | false |
sansserif.italic | false |
serif | false |
serif.bold | false |
serif.bolditalic | false |
serif.italic | false |
|