Comment configurer les applications DPI de Java Swing sous Windows / Linux?


Answers

Réponse courte: Vous devez l'exécuter sur JRE 9.

Longue réponse:
C'est parce que le runtime Java s'est déclaré "DPI-aware" mais ne l'a pas vraiment supporté pour AWT et Swing. Les applications Java ont été dimensionnées et rendues basées sur des pixels plutôt que d'être correctement mises à l'échelle, y compris les affichages HiDPI. Quoi qu'il en soit, cela a été récemment résolu. Voir le numéro JEP 263: HiDPI Graphics sur Windows et Linux et la upgrade .

Donc, l'augmentation de la taille de la police ne fonctionne pas (parce qu'elle n'augmente pas le reste des choses); l'argument jvm -Dsun.java2d.dpiaware=false ne fonctionne pas (car il n'est pas vraiment supporté); et le fichier manifeste + modification de registre (pour Windows) ne fonctionne tout simplement pas.

Solution: Vous devez l'exécuter sur JRE 9 car il prend réellement en charge cette fonctionnalité.

Question

Si vous avez un moniteur avec un PPP supérieur à 150 (tel que Macbook Pro), vous pouvez également trouver le problème: la police de l'application Java Swing est trop petite pour un moniteur PPP élevé , et je ne peux pas changer la taille ignore le DPI de Windows directement, affichant seulement le DPI original -> 96 ). Je ne peux rien faire d'autre que changer la résolution de l'écran, ce qui pourrait absolument rendre tout flou sur l'écran LCD.

Oui, j'ai un ordinateur portable avec un moniteur haute résolution, 15,6 'avec une résolution de 1920x1080, certaines applications de bureau Java semblent très petites sur mon ordinateur portable, comme Matlab, Burpsuite, etc. Je fais des recherches sur Internet depuis très longtemps, mais ne peut toujours pas trouver une méthode pour le problème. Je sais que je peux changer les polices JRE via JRE_HOME/lib/font/fontconfig.properties.src , mais je ne trouve aucun endroit pour définir la taille de police par défaut ou DPI pour les polices de bureau Java.

Est-ce que le problème n'a pas de solution? Avez-vous un moniteur DPI élevé? Comment faites-vous avec de telles applications? Est-ce que Swing abandonne les utilisateurs de DPI?




J'ai réussi à le résoudre en suivant ces instructions: Link .

C'est en allemand, mais je vais traduire les choses importantes.

Créez cette clé de registre:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]
"PreferExternalManifest"=dword:00000001

Créez un fichier manifeste avec ce contenu:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">

<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>

<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
    </assemblyIdentity>
  </dependentAssembly>
</dependency>

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
    </requestedPrivileges>
  </security>
</trustInfo>

<asmv3:application>
  <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
    <ms_windowsSettings:dpiAware xmlns:ms_windowsSettings="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</ms_windowsSettings:dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>

</assembly>

Copiez-le dans le répertoire bin où java.exe et javaw.exe se trouvent à l'intérieur et java.exe.manifest -le javaw.exe.manifest et javaw.exe.manifest (Vous aurez deux fichiers avec le même contenu mais des noms différents).

HTH.

Bernd




Related