有沒有辦法在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