- PR -

論理フォント名から物理フォント名の取得方法

1
投稿者投稿内容
rinngo
会議室デビュー日: 2004/07/28
投稿数: 4
お住まい・勤務地: 千葉県
投稿日時: 2004-07-30 15:57
こんにちは。

jakarta poi を使用してエクセルファイルを作成するときにフォントを指定できるのですが、
"MS ゴシック"等の物理フォント名を直接指定すればうまくいくのですが、
国際化を考え、プログラム上に物理フォント名を直接記述することを避けたいです。
論理フォント名から物理フォント名を取得して設定する方法を
ご存知の方アドバイスをお願いします。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-08-05 13:43
JREインストールディレクトリ/libに、font.properties.fooというファイルがあるかと
思います。AWT/Swing等で使用する論理フォント名<->物理フォント名のマッピングを
記述してあるプロパティファイルで、JREはこれを利用して論理フォント名に対応する
物理フォント名を解決しています。
同じような物を作りこんでみるのが妥当な解決策かと思います。

国際化対応をする場合、ロケールに応じて自動的に読み込み対象とするプロパティファイル名
を実行時に変更する仕組み(java.util.ResourcBundle)というものが、JDKには準備されています。調べてみてください。

[ メッセージ編集済み 編集者: シュン 編集日時 2004-08-05 14:25 ]
ちょま吉
大ベテラン
会議室デビュー日: 2004/08/04
投稿数: 112
投稿日時: 2004-08-05 18:42
コード:
        java.awt.GraphicsEnvironment env = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
        Font[] fontList = env.getAllFonts();
        for (int i = 0; i < fontList.length; i++) {
          System.out.println("論理フォント名:" + fontList[i].getName());
          System.out.println("物理フォント名:" + fontList[i].getFamily());
        }



これで論理・物理フォント名は取得できるのですが、、、的をはずしているような、、。

ちなみに、1.4.0のJavaDocには下の記述があります。
引用:
論理 フォントは Java プラットフォームで定義される、Serif、SansSerif、Monospaced、Dialog、および DialogInput の 5 つのフォントファミリです。すべての Java 実行環境でこの 5 つがサポートされていなければなりません。これらの論理フォントは実際のフォントライブラリではなく、論理フォント名は Java 実行環境で物理フォントにマッピングされます。マッピングは実装、そして通常ロケールに依存し、提供される外見やメトリックスもそれに応じて異なります。通常はさまざまな文字をカバーするため、各論理フォント名が複数の物理フォントにマッピングされます。



ご参考まで。
rinngo
会議室デビュー日: 2004/07/28
投稿数: 4
お住まい・勤務地: 千葉県
投稿日時: 2004-08-06 10:50
返信ありがとうございます。


GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fontList = env.getAllFonts();

で取得できるフォントのgetName()は「DialogInput」などのJavaの論理フォント名ではなく、
プラットフォームで定義されているフォント名が取得できます。
ただし、"MS Gothic"などのロケールに依存しないフォント名は取得できましたので
このフォント名からgetFamily()などで取得したロケールごとの"MS ゴシック"などのフォント名に変換をかけようと思います。
とりあえず、Excelに書き込むプログラムなのでこれで国際化はできたのではないかと思います。
1

スキルアップ/キャリアアップ(JOB@IT)