2015-05-27 3 views
2

Как изменить шрифт всех компонентов, отображаемых в приложении 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 или JComboBoxes

Затем я попытался установить шрифт с помощью цикла по всем клавишам 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.

+1

[Кроме того, он позволяет изменять существующие темы и создавать свой собственный внешний вид, только редактируя файл конфигурации на основе XML - вам не нужно писать сложный Java-GUI-код.] (http://www.javasoft.de/synthetica/) – mKorbel

+0

голосовой тго закрывается как вне темы – mKorbel

ответ

0

Я думаю, что вы можете обновить this answer из 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)); 
+1

* "' new java.awt.Font ("Arial Unicode MS" .. '" * Для большей поддержки кросс-платформой используйте логические шрифты (например, 'Font.SANS_SERIF' в отличие от' 'Arial Unicode MS ''). –

+0

согласен ... но я просто использовал 'Font' в исходном вопросе .... –

+0

Это не сработало. Я отлаживал код и значения записывались для каждого компонента, но пользовательский интерфейс все тот же. Возможно ли, что Synthetica игнорирует настройки мануала? – mareicha

0

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

public class MyJButton extends JButton { 

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

} 

public class MyJTextArea extends JTextArea { 

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

} 
. 
. 
. 

И после этого создайте этот класс whic ч держит все ваши шрифты свойства, как:

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); 
    } 

} 

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

Смежные вопросы