2015-06-05

Liebling ich habe die GUI geschrumpft

Zugegeben, es ist nicht mehr besonders hip, über AWT oder Swing zu bloggen. Auf der anderen Seite gibt es noch so viele Programme, die man gerne weiter benutzen möchte. Bei mir ist das unter anderem meine kleine Textschnipselverwaltung Clip4Moni. Unglücklicherweise macht(e) diese ungewollt auf ganz modernen Geräten mit high dpi-Anzeige keine besonders gute Figur. Das (bekannte) Problem ist, dass AWT und Swing alle Komponenten zu klein rendern. Das mag insbesondere bei AWT überraschen, weil native Komponenten doch eigentlich wissen sollten, wie sie sich korrekt darstellen müssen.

Screenshot von einem high dpi-Gerät

Mein Surface Pro 3 löst bei 12 Zoll Bildschirmdiagonale üppige 2160 x 1440 Pixel auf. Das sind 216 dpi. Auf dem Screenshot ist schön zu sehen, wie groß eine 9-Punkt Segoe UI bei einer Skalierung von 200% eigentlich sein müsste. Und wie lächerlich klein dagegen das AWT-Menü ist. Die Frage ist nun: kann man eine lesbarere Darstellung erzwingen, indem man dem AWT befiehlt, einen größeren Zeichensatz für Menüs zu verwenden? Die Größe von Fonts wird in Punkt angegeben; ein Punkt entspricht einem Zweiundsiebzigstel Zoll. Für die Segoe UI 9 Punkt wären dies bei 200% dann 18 Punkt. Welchen Zeichensatz AWT und Swing für Menüs verwenden, kann man auf zweierlei Weise abfragen: Font f = UIManager.getFont("MenuItem.font") oder Font f = (Font) Toolkit.getDefaultToolkit().getDesktopProperty("win.menu.font"). Letzteres liefert aber nur unter Windows ein Ergebnis.

Skurril ist, dass beide Abfragen auf meinem Rechner Segoe UI 18 Punkt liefern. Heißt das, dass der Workaround mit dem größeren Font nicht funktioniert? Aus Verzweiflung habe ich den gelieferten Zeichensatz mit setFont() für alle Einträge des Clip4Moni-Menüs gesetzt. Das Ergebnis ist überraschend:

Screenshot eines korrigierten Menüs

Sieht so aus, wie es soll.  Es reicht also, für jedes Menüelement explizit den Font zu setzen, den Java als Standard liefert. Noch sind in Clip4Moni die Swing-Dialoge zu klein, aber das müsste sich mit ähnlichen Workarounds ebenfalls beheben lassen.

1 comment:

  1. Textbausteine in JEDER Anwendung mit 2 clicks zur Verfügung zu haben ist einfach toll! Ich schätze und nutze dieses Programm täglich!

    ReplyDelete