有没有办法在Swing GTK LaF中更改默认字体大小?如何更改Swing GTK LookAndFeel中的默认字体大小?
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不提供其他字体属性,但是来自其他地方!
这是行不通的。对于GTK LaF,对于我设置比例因子的内容没有什么区别---这个代码没有明显的效果。 – uckelman 2010-10-19 19:55:21
@uckelman它是否适用于其他LaF? – 2010-10-19 20:02:46
对UIManager.getInstalledLookAndFeels()的调用似乎会导致X的灾难性崩溃,不知何故---机器会很难锁定。如果我删除这个和外部循环,你的代码对Metal LaF来说是有效的。 – uckelman 2010-10-19 20:43:59