2009-07-09 8 views
8

Ich habe eine Java-Anwendung mit der Substanz LookAndFeel mit Windows als Zielplattform und ich möchte die DPI-Einstellung meiner Anwendung ohne ändern die Systemeinstellung.Kann ich die DPI-Auflösung meiner Java Swing-Anwendung einstellen, ohne die DPI-Einstellungen des Systems zu ändern?

Ich möchte, dies zu tun, weil ich Windows nicht den Benutzer zwingen will, neu zu starten, und weil viele Windows-Anwendungen scheinen Probleme mit sehr hohen DPI-Einstellungen zu haben (> 120)

PS: Ich bin mir bewusst, dass das Substance LaF erlaubt, die Schriftgröße zur Laufzeit zu skalieren, aber auf diese Weise wird nur die Höhe meiner Steuerelemente skaliert, nicht die Breite. Ich möchte, dass meine GUI vollständig skaliert wird, wie es passieren würde, wenn ich die DPI-Einstellung des Systems einstelle.

+1

+1, wollte gerade das Gleiche fragen. :) – Epaga

Antwort

5

Ich weiß nicht, ob das möglich ist. Das Aussehen & Gefühl hätte es zu unterstützen, und soweit ich weiß, das Windows Look & Feel nicht. Hier ist ein Hack, den Sie in Betracht ziehen können: Iterieren Sie durch alle in Ihrem Look definierten Schriften & fühlen und definieren Sie sie etwas größer. Hier ist ein Code-Snippet, das tut dies:

for (Iterator i = UIManager.getLookAndFeelDefaults().keySet().iterator(); i.hasNext();) { 
    String key = (String) i.next(); 
    if(key.endsWith(".font")) { 
     Font font = UIManager.getFont(key); 
     Font biggerFont = font.deriveFont(2.0f*font.getSize2D()); 
     // change ui default to bigger font 
     UIManager.put(key,biggerFont); 
    } 
} 

Ich denke, man könnte noch einen Schritt nehmen weiter und Skalengrenzen neu definieren proportional auch, aber das wird sehr kompliziert, sehr schnell

+0

Beste Antwort so weit :) –

+1

Wenn Ihr 'UIManager' Schlüssel hat, die nicht' Strings' sind, dann wird dies eine 'ClassCastException' auslösen. – uckelman

+0

Funktioniert nicht wegen der Umwandlung in Zeichenfolgen. – Pavel

1

So ist die tatsächliche Antwort scheint sei: nein du kannst nicht. Das ist wirklich ein Mist, denn es ist ein Schmerz zu testen.

1

Ja, Sie können, aber Sie müssen es auf JRE 9 ausführen.

Dies liegt daran, dass sich die Java-Laufzeitumgebung als "DPI-aware" deklariert, aber nicht wirklich für AWT und Swing unterstützt hat. Java-Anwendungen wurden auf der Grundlage von Pixeln skaliert und gerendert, anstatt dass sie richtig skaliert wurden, einschließlich HiDPI-Anzeigen. Wie auch immer, das wurde kürzlich gelöst. Siehe die Ausgabe JEP 263: HiDPI Graphics on Windows and Linux und die upgrade.

Also, die Erhöhung der Schriftgröße funktioniert nicht (weil es den Rest der Dinge nicht erhöht); das jvm-Argument -Dsun.java2d.dpiaware=false funktioniert nicht (weil es nicht wirklich unterstützt wurde); und die Manifestdatei + Registry-Bearbeitung (für Windows) funktioniert einfach nicht.

Lösung: Sie müssen es auf JRE 9 ausführen, da es diese Funktion wirklich unterstützt.

Verwandte Themen