From: nekop@george24.com (nekop )
To: java-house-brewers@java-house.etl.go.jp
Message-ID: <200203071428.AA00058@hiyo.george24.com>
Date: Thu, 7 Mar 2002 23:26:36 JST
References: <200203061457.AA00057@hiyo.do-johodai.ac.jp>

[JavaHouse-Brewers:49474] Re: setFont に関して

[Prev][Next] | [Threads][Index] | [Search][Topics]
nekopです。自己フォローです。


nekop <nekop@george24.com> wrote:

>javax.swing.UIManager#getDefaults() で、デフォルトテーブルである

表記の問題ですが、staticメソッドなので javax.swing.UIManager.getDefaults() の
方が良いですね。

>javax.swing.UIDefaults オブジェクトを取得します。
>このクラスは java.util.HashTable クラスのサブクラスです。ここから 
>java.util.HashTable#keySet() でキーセットを取り出し、キーの末尾が "font"で終
>わっているものの value に指定したいFontを設定します。

java.awt.Font ではなく javax.swing.plaf.FontUIResource を設定ですね。Fontを設
定しても*一応*動きますが。

また、FontUIResourceが格納されているキーには、"InternalFrame.titleFont"や
"MenuItem.acceleratorFont"なんてものもあるので、末尾が"Font"のものも、置き換え
の対象としたほうが良いと思います。

キーの末尾に頼るのではなく、if (エントリ instanceof FontUIResource) という判定
で置き換えたほうが良いかもしれません。


以下、フォントの変更部分だけstaticメソッドにしてみました。


    public static void setFont(Font font) {
        FontUIResource fontUIResource = new FontUIResource(font);
        UIDefaults defaultTable = UIManager.getLookAndFeelDefaults();
        Set set = defaultTable.keySet();
        Iterator it = set.iterator();
        while(it.hasNext()) {
            Object o = it.next();
            if (o instanceof String) {
                String s = (String)o;
                if (s.endsWith("font") ||
                    s.endsWith("Font")) {
                    UIManager.put(s, fontUIResource);
                }
            }
        }
    }


# String#endsWith(String) の存在をすっかり忘れてました。笑 


Happy Swinging?
//nekop nekop@george24.com

[Prev][Next] | [Threads][Index] | [Search][Topics]
Follow-ups: