Установка шрифта по умолчанию для программы Swing - PullRequest
58 голосов
/ 15 сентября 2011

Мне было интересно, как установить шрифт по умолчанию для всей моей программы свинг Java.Из моего исследования выясняется, что это можно сделать с помощью UIManager, что-то связанное с LookAndFeel, но я не могу точно найти, как это сделать, и UIManager выглядит довольно сложно.

Ответы [ 12 ]

0 голосов
/ 13 июня 2015

Чтобы решить эту проблему, я просто реализую AWTEventListener и слушаю COMPONENT_ADDED из ContainerEvent.

Все описание истории по адресу: http://wiki.idempiere.org/en/Swing_Miss_Support_Some_Language

Весь код по адресу: https://bitbucket.org/hieplq/unicentapos/src/9b22875ab65e26ff46fd9ae62d556b7f64621afa/src-extend/vn/hsv/uitil/font/FontGlyphsUtil.java?at=tip

  1. Реализация AWTEventListener

public void eventDispatched(AWTEvent event) {
    if (!isMissSupportGlyph || !(event instanceof ComponentEvent) || !(event instanceof ContainerEvent))
        return;

    if (event instanceof ContainerEvent){
        ContainerEvent containerEvent = (ContainerEvent)event;
        if (containerEvent.getID() == ContainerEvent.COMPONENT_ADDED){
            updateChildControlFont(containerEvent.getChild());
        }
    }
}
Добавить прослушиватель реестра (лучше всего запустить его при запуске программы)

Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.COMPONENT_EVENT_MASK | AWTEvent.CONTAINER_EVENT_MASK);
0 голосов
/ 21 августа 2014

Я использую Nimbus L & F.

Используя код из @Romain Hippeau, мне пришлось использовать UIManager.getLookAndFeelDefaults() вместо UIManager.getDefaults() и использовать возвращенную ссылку на put измененные значения:

    int szIncr = 5; // Value to increase the size by
    UIDefaults uidef = UIManager.getLookAndFeelDefaults();
    for (Entry<Object,Object> e : uidef.entrySet()) {
        Object val = e.getValue();
        if (val != null && val instanceof FontUIResource) {
            FontUIResource fui = (FontUIResource)val;
            uidef.put(e.getKey(), new FontUIResource(fui.getName(), fui.getStyle(), fui.getSize()+szIncr));
        }
    }

По некоторым причинам, он не работает с L & F по умолчанию ... (основываясь на ограниченных тестах, которые я выполнил)

...