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


Answers

Vous pouvez modifier les polices comme celle-ci

public class Test {

public static void main(String[] args) {
    new Test();
}

public Test() {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                ex.printStackTrace();
            }

            setDefaultSize(24);

            JFrame frame = new JFrame("Testing frame");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new JLabel("Hello world"));
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}

public static void setDefaultSize(int size) {

    Set<Object> keySet = UIManager.getLookAndFeelDefaults().keySet();
    Object[] keys = keySet.toArray(new Object[keySet.size()]);

    for (Object key : keys) {

        if (key != null && key.toString().toLowerCase().contains("font")) {

            System.out.println(key);
            Font font = UIManager.getDefaults().getFont(key);
            if (font != null) {
                font = font.deriveFont((float)size);
                UIManager.put(key, font);
            }

        }

    }

}

}

utiliser la même approche pour augmenter ou diminuer les polices pour différentes mises en page

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 modifier 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: Lien .

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