【发布时间】:2011-04-23 20:25:48
【问题描述】:
有没有办法改变 Swing GTK LaF 中的默认字体大小?
GTK LaF 似乎假定为 72dpi,因此所有字体的大小仅为使用 96dpi 屏幕时应有的大小的 3/4。有关详细信息,请参阅此Fedora bug。在等待修复的同时,我想找到一种解决方法。
我已经尝试通过UIDefaults 重置字体大小,例如推荐的here,但是(也如那里所述)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 提供的,而是来自其他地方!
【问题讨论】:
标签: java swing gtk look-and-feel font-size