Как изменить шрифты всех компонентов

Как изменить шрифт всех компонентов, отображаемых в моем Java-приложении?

Я попробовал это с помощью UIManager

UIManager.put("TextField.font",  new java.awt.Font("Arial Unicode MS", java.awt.Font.PLAIN, 11));
UIManager.put("Label.font",  new java.awt.Font("Arial Unicode MS", java.awt.Font.PLAIN, 11));
UIManager.put("ComboBox.font",  new java.awt.Font("Arial Unicode MS", java.awt.Font.PLAIN, 11))

Как ни странно, это изменило шрифт текстового поля, но не работало для JLabels или JComboBox.

Затем я попытался установить шрифт, перебирая все клавиши, которые знает UIManager:

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());
            FontUIResource fontUIResource = new FontUIResource(font);
            UIManager.put(key, fontUIResource);
            UIManager.getDefaults().put(key, fontUIResource);
            UIManager.getLookAndFeel().getDefaults().put(key, fontUIResource);
        }
    }
}

Этот код вообще не работал.

Я должен сказать, что я использую Synthetica как LookAndFeel... поэтому я не знаю, как это мешает моим ручным настройкам через UIManager.


person mareicha    schedule 27.05.2015    source источник


Ответы (2)


Я думаю, вы можете обновить этот ответ из Roman следующим образом:

public static void setUIFont (java.awt.Font f){
    java.util.Enumeration keys = UIManager.getDefaults().keys();
    while (keys.hasMoreElements()) {
      Object key = keys.nextElement();
      Object value = UIManager.get (key);
      if (value != null && value instanceof java.awt.Font)
        UIManager.put (key, f);
      }
}

Затем используйте его с вашим Font следующим образом:

setUIFont (new java.awt.Font("Arial Unicode MS", java.awt.Font.PLAIN, 11));
person Jordi Castilla    schedule 27.05.2015
comment
new java.awt.Font("Arial Unicode MS".. Для большей кроссплатформенной поддержки используйте логические шрифты (например, Font.SANS_SERIF вместо "Arial Unicode MS"). - person Andrew Thompson; 27.05.2015
comment
согласен... но я только что использовал Font в исходном вопросе.... - person Jordi Castilla; 27.05.2015
comment
Это не сработало. Я отладил код, и значения прописаны для каждого компонента, но пользовательский интерфейс остался прежним. Возможно ли, что Synthetica игнорирует эти ручные настройки? - person mareicha; 27.05.2015
comment
Это скопированный ответ из здесь, вы просто немного изменили имя и номер. - person user1803551; 28.05.2015
comment
@user1803551 user1803551 на самом деле я использую его в одном из своих приложений, и ДА, я думаю, я взял его оттуда, потому что мой голос все еще там ... в чем проблема? - person Jordi Castilla; 28.05.2015
comment
Здесь. - person user1803551; 28.05.2015
comment
Плохо, согласен и исправлено. @user1803551 - person Jordi Castilla; 28.05.2015
comment
Хорошо. Теперь почему бы просто не проголосовать за то, чтобы закрыть как дубликат? - person user1803551; 28.05.2015
comment
Ну, он был закрыт как дубликат в любом случае. - person user1803551; 29.05.2015

Вы можете создавать свои собственные компоненты, такие как:

public class MyJButton extends JButton {

    public MyJButton(){
        setFont(FontClass.getBasicFont());
    }

}

public class MyJTextArea extends JTextArea {

    public MyJTextArea (){
        setFont(FontClass.getBasicFont());
    }

}
.
.
.

А затем создайте этот класс, который содержит все ваши свойства шрифтов, например:

public class FontClass(){

    private static final String BASIC_FONT_FACE = "Arial";

    private static final String BASIC_FONT_SIZE = 12;

    public static Font getBasicFont(){
        return new Font(BASIC_FONT_FACE, Font.PLAIN, BASIC_FONT_SIZE);
    }

}

Я предполагаю, что это примитивный способ, но он может быть полезен, если вы хотите сохранить эти значения в своей БД.

person a_z    schedule 28.05.2015