Gibt es eine Möglichkeit, die Standardschriftgröße im Swing GTK LaF zu ändern?Wie ändert man die Standardschriftgröße im Swing GTK LookAndFeel?
Der GTK LaF scheint 72dpi anzunehmen, so dass alle Schriftarten nur 3/4 der Größe sind, die sie bei Verwendung eines 96dpi-Bildschirms haben sollten. Siehe hierzu Fedora bug für Details. Ich möchte in der Zwischenzeit einen Workaround finden, während ich auf die Reparatur warte.
Ich habe bereits versucht, die Schriftgröße über UIDefaults
, wie empfohlen here, zum Beispiel, aber (wie auch dort bemerkt) der GTK LaF scheint dies zu ignorieren versucht.
I konnte ein Widget Fabrik bauen, die auch die gewünschte Schriftgröße würde für alle meine Swing-Widgets erstellen, aber das wird massiv invasive sein, so möchte ich diesen Weg zu vermeiden, wenn es eine andere Möglichkeit ist .
Edit: Die folgende nicht funktioniert:
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;
}
}
Man könnte denken, diese Schlüssel-Wert-Paare mindestens ein Dutzend drucken würde, aber er druckt nur eins: TitledBorder.font. Anscheinend werden die anderen Schrifteigenschaften nicht von GTLLookAndFeel geliefert, sondern kommen von irgendwo anders!
Dies funktioniert nicht. Für den GTK LaF macht es keinen Unterschied, wofür ich den Skalierungsfaktor eingestellt habe --- dieser Code hat keine merkliche Auswirkung. – uckelman
@uckelman Funktioniert es bei anderen LaFs? –
Der Aufruf von UIManager.getInstalledLookAndFeels() scheint einen katastrophalen Absturz von X zu verursachen, irgendwie --- die Maschine blockiert stark. Wenn ich diese und die äußere Schleife entferne, funktioniert dein Code für das Metal LaF. – uckelman