chofutaroメモ

ソフトウェアエンジニアによるソフトウェアエンジニアのためのメモ書き

フォントの一括変更

複数の画面を使うプログラムに対して、フォント(見栄え)を統一する方法を調べました。画面仕様の調整において複数枚画面の見栄えを統一する必要は多々あり、そのデザイン要素の中でフォントが代表的な要素だと思ったからです。

@IT会議室で教えていただいたページに掲載されている方法を適用すると簡単に実現できました。

java.util.Enumeration keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
    Object key = keys.nextElement();
    Object value = UIManager.get(key);
    if (value instanceof javax.swing.plaf.FontUIResource) {
        UIManager.put(key, f);
    }
}

ちなみに、この処理の呼び出しはSwingコンポーネントインスタンス化前に実行しておく必要があるようです。私は最初、以下のように記述して失敗しました。

(誤)
public AppFrame() {
    initComponents();
     //  setUIFont()はUIManagerを使ってフォントを変更する処理
    setUIFont(new javax.swing.plaf.FontUIResource("MS ゴシック", Font.PLAIN, 16));
}

(正)
public AppFrame() {
     //  setUIFont()はUIManagerを使ってフォントを変更する処理
    setUIFont(new javax.swing.plaf.FontUIResource("MS ゴシック", Font.PLAIN, 16));
    initComponents();
}

サンプル

所感

フォントは、年齢によって適切と考えられるサイズが異なり、フォントの種類は嗜好によるところが大きいと思います。よって、画面の見栄えに関する仕様調整は難しく、種類やサイズを固定するには試行錯誤が必要になりがちです。
従って、簡単に、一括して、種類やサイズが変更できる仕組みを備え付けておくことが肝要なのではないでしょうか。
C#(というか.NET Frameworkでしょうか)にそのような機能はないように思います。Look&Feelを比較的簡単に自作できる点も考えるとJavaも結構良いなと見直しました。