12
votes

Puis-je définir la résolution DPI de mon application Java Swing sans changer le paramètre DPI des systèmes?

J'ai une application Java à l'aide de la substance Lookandfeel avec Windows comme la plate-forme cible et je souhaite augmenter le paramètre DPI de mon application sans changer le réglage du système.

Je veux faire cela parce que je ne veux pas forcer l'utilisateur à redémarrer Windows et que de nombreuses applications Windows semblent avoir des problèmes avec des paramètres DPI très élevés (> 120)

PS: Je suis conscient que la substance LAF permet d'élaborer la taille de la police au moment de l'exécution, mais de cette façon, seule la hauteur de mes commandes est mise à l'échelle, pas la largeur. Je veux que mon interface graphique soit pleinement mis à l'échelle car cela se produirait si je définissais le paramètre DPI du système.


1 commentaires

+1, allait juste demander la même chose. :)


3 Réponses :


6
votes

Je ne sais pas si cela est possible. Le look et la sensation devraient le soutenir, et autant que je sache, le Windows Look & Sentence ne le fait pas. Voici un piratage que vous pouvez considérer: itérer à travers toutes les polices définies dans votre look & senteur et redéfinissez-les pour être calmes. Voici un extrait de code qui fait ceci:

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);
    }
}


2 commentaires

Si votre uimanager a des touches qui ne sont pas strings , alors cela lance un classcastexception .


Ajout de tostring à la fin résolu le problème pour moi Key Key = (string) i.Sext (). Tostring ();



2
votes

La réponse actuelle semble être: non, vous ne pouvez pas. C'est vraiment un bummer parce que c'est une douleur à tester.


0 commentaires

2
votes

Oui, vous pouvez, mais vous devez l'exécuter sur JRE 9 .

C'est parce que le jeu d'exécution Java s'est déclaré "DPI-Cays" mais ne l'a pas vraiment soutenu pour AWT et Swing. Les applications Java ont été dimensionnées et rendantées sur la base de pixels plutôt que d'être correctement évoluées, cela comprenait des écrans HIDPI. Quoi qu'il en soit, cela a été récemment résolu. Voir le numéro JEP 263: Graphiques HIDPI sur Windows et Linux et le Mise à niveau .

Ainsi, augmenter la taille de la police ne fonctionne pas (car elle n'augmente pas le reste des choses); L'argument jvm -dsun.java2d.dpiaware = false ne fonctionne pas (car il n'était pas vraiment pris en charge); et le fichier manifeste + le registre Modifier (pour Windows) ne fonctionne pas.

solution: vous devez l'exécuter sur JRE 9 car il prend en charge vraiment cette fonctionnalité.


0 commentaires