有没有办法在Swing GTK LaF中更改默认字体大小?
GTK LaF似乎假定72dpi,因此在使用96dpi屏幕时,所有字体的大小都只有应有大小的3/4。有关详细信息,请参见Fedora bug。在等待修复期间,我想找到一种解决方法。
例如,我已经尝试通过
我“可以”构建一个小部件工厂,该工厂还将设置所需的字体大小以创建所有我的Swing小部件,但这将是极其具有侵入性的,因此如果有其他方法,我想避免这条路。 编辑:以下内容无效:
你可能认为这会打印至少十二个键值对,但实际上只打印一个:TitledBorder.font。显然,GTLLookAndFeel没有提供其他字体属性,而是来自其他地方!
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没有提供其他字体属性,而是来自其他地方!
getDefaults()
方法不起作用,因为键不存在。 - uckelmancom.sun.java.swing.plaf.gtk
中的其他类。) - uckelman