Как изменить размер шрифта по умолчанию в Swing GTK LookAndFeel?
Есть ли способ изменить размер шрифта по умолчанию в Swing GTK LaF?
GTK LaF, похоже, принимает 72dpi, поэтому все шрифты имеют размер только 3/4 от размера, который они должны быть при использовании экрана 96dpi. Видеть этоОшибка Fedora для деталей. Тем временем я хотел бы найти обходной путь, пока жду исправления.
Я уже пытался сбросить размер шрифта черезUIDefaults
в соответствии с рекомендациямиВотНапример, но (как и там отмечалось) GTK LaF, похоже, игнорирует это.
I мог создайте фабрику виджетов, которая также установит желаемый размер шрифта для создания всех моих виджетов Swing, но это будет массово инвазивно, поэтому я бы хотел избежать этого маршрута, если есть какой-либо другой способ.
Редактировать: Следующее не работает:
public class GTKLaF extends com.sun.java.swing.plaf.gtk.GTKLookAndFeel {
@Override
public UIDefaults getDefaults() {
final float scale = 3f;
final UIDefaults defaults = super.getDefaults();
final Map<Object,Object> changes = new HashMap<Object,Object>();
for (Map.Entry<Object,Object> e : defaults.entrySet()) {
final Object key = e.getKey();
final Object val = e.getValue();
if (val instanceof FontUIResource) {
final FontUIResource ores = (FontUIResource) val;
final FontUIResource nres =
new FontUIResource(ores.deriveFont(ores.getSize2D()*scale));
changes.put(key, nres);
System.out.println(key + " = " + nres);
}
else if (val instanceof Font) {
final Font ofont = (Font) val;
final Font nfont = ofont.deriveFont(ofont.getSize2D()*scale);
changes.put(key, nfont);
System.out.println(key + " = " + nfont);
}
}
defaults.putAll(changes);
return defaults;
}
}
Вы можете подумать, что это напечатало бы по крайней мере дюжину пар ключ-значение, но печатает только одну: TitledBorder.font. Очевидно, что другие свойства шрифта не предоставляются GTLLookAndFeel, а получены из другого места!