Есть ли способ изменить размер шрифта по умолчанию в Swing GTK LaF?
GTK LaF, похоже, принимает 72dpi, поэтому все шрифты имеют размер только 3/4 от размера, который они должны быть при использовании экрана 96dpi. Подробности смотрите в ошибке Fedora . Тем временем я хотел бы найти обходной путь, пока жду исправления.
Я уже пытался сбросить размер шрифта с помощью UIDefaults
, как рекомендовано, например, здесь , но (как и там отмечено) GTK LaF, похоже, игнорирует это.
Я мог бы создать фабрику виджетов, которая также установила бы желаемый размер шрифта для создания всех моих виджетов 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, а получены из другого места!