8

のすべてのコンポーネントに特定のフォントを設定したいのですがJPanel、JPanel に限定されず、より一般的な質問が望ましいです。コンテナー (JFrame または JPanel) 内のコンポーネントのリストにフォントを設定するにはどうすればよいですか?

4

4 に答える 4

20

以下は、任意のコンテナの下のコンポーネント ツリー全体に Font を指定できる簡単な方法です (単純なコンポーネントでもかまいません)。

public static void changeFont ( Component component, Font font )
{
    component.setFont ( font );
    if ( component instanceof Container )
    {
        for ( Component child : ( ( Container ) component ).getComponents () )
        {
            changeFont ( child, font );
        }
    }
}

パネルと特定のフォントをこのメソッドに渡すだけで、すべての子もリファクタリングされます。

于 2012-10-04T16:09:09.720 に答える
12

-これを行うために使用できますUIManager....

例えば:

public class FrameTest {

    public static void setUIFont(FontUIResource f) {
        Enumeration keys = UIManager.getDefaults().keys();
        while (keys.hasMoreElements()) {
            Object key = keys.nextElement();
            Object value = UIManager.get(key);
            if (value instanceof FontUIResource) {
                FontUIResource orig = (FontUIResource) value;
                Font font = new Font(f.getFontName(), orig.getStyle(), f.getSize());
                UIManager.put(key, new FontUIResource(font));
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {

        setUIFont(new FontUIResource(new Font("Arial", 0, 20)));

        JFrame f = new JFrame("Demo");
        f.getContentPane().setLayout(new BorderLayout());

        JPanel p = new JPanel();
        p.add(new JLabel("hello"));
        p.setBorder(BorderFactory.createTitledBorder("Test Title"));

        f.add(p);

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300, 300);
        f.setVisible(true);
    }
}
于 2012-10-04T15:12:41.560 に答える
4

UIManager変更するコンポーネントのフォント値を設定します。たとえば、次のようにして、ラベルに使用するフォントを設定できます。

Font labelFont = ... ;
UIManager.put("Label.font", labelFont);

ルック アンド フィール (L&F) が異なれUIManagerば、クラスのプロパティも異なる可能性があるため、ある L&F から別の L&F に切り替えると、問題が発生する可能性があることに注意してください。

于 2012-10-04T15:09:56.583 に答える