studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java swing matlab fonts dpi

java - para - manual de programacion android pdf



¿Cómo configurar el DPI de las aplicaciones Java Swing en Windows/Linux? (4)

Actualmente estoy investigando este problema en Windows. Esto es lo que encontré:

La mayoría de las características de Swing Look & Feels no son compatibles con ningún DPI alto, ni siquiera Nimbus, aunque se supone que es escalable. Encontré algunas publicaciones de blog antiguas que decían que Nimbus podría ofrecer una escala alta de DPI, pero aparentemente eso nunca sucedió.

La única excepción es System LAF, pero su fuente predeterminada es ~ 10% más pequeña que el tamaño real de la fuente del sistema, en todos los ajustes de DPI. Además, el sistema debe seleccionarse explícitamente como se describe aquí: http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

Tampoco hay un único factor de escala que puedas configurar en Swing. La LAF específica debe proporcionar código para manejar la escala. Entonces, lo mejor que puedes hacer es seleccionar Sistema y esperar que sea lo suficientemente bueno.

Sin embargo, JavaFX escala correctamente y automáticamente todo el camino hasta el 150% en mi sistema. Si es posible, sugiero que use JavaFX para construir su GUI.

editar: Hice un par de pequeños programas de prueba y tomé capturas de pantalla de comparación para varios marcos de GUI, temas de Swing y configuración de DPI. Esto podría ser informativo para las personas que leen esta pregunta: http://kynosarges.org/GuiDpiScaling.html

Si tiene un monitor con un DPI superior a 150 (como Macbook Pro), también puede encontrar el problema: la fuente en la aplicación Java Swing es demasiado pequeña para el monitor de DPI alto , y no puedo cambiar el tamaño de la fuente ( ignora el DPI de Windows directamente, solo muestra el DPI muy original -> 96 ). No puedo hacer nada más que cambiar la resolución de la pantalla, lo que podría hacer absolutamente todo borroso en la pantalla LCD.

Sí, tengo una computadora portátil con un monitor de PPP alto, 15.6 ''con resolución de 1920x1080, algunas aplicaciones de escritorio de Java se ven muy pequeñas en mi computadora portátil, como Matlab, Burpsuite, etc. He estado buscando en Internet durante mucho tiempo, pero todavía no puede encontrar un método para el problema. Sé que puedo cambiar las fuentes JRE a través de JRE_HOME/lib/font/fontconfig.properties.src , pero no puedo encontrar ningún lugar para establecer el tamaño de fuente predeterminado o DPI para fuentes de escritorio Java.

¿El problema no tiene solución? ¿Tienes un monitor de DPI alto? ¿Cómo se hace con tales aplicaciones? ¿Swing renuncia a los usuarios con alto DPI?


Pude resolverlo siguiendo estas instrucciones: Link .

Está en alemán, pero traduciré las cosas importantes.

Crea esta clave de registro:

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

Crea un archivo de manifiesto con este contenido:

<?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>

Cópielo en el directorio bin donde se encuentran java.exe y javaw.exe y llámelo java.exe.manifest y javaw.exe.manifest (tendrá dos archivos con el mismo contenido pero diferentes nombres).

HTH.

Bernd


Respuesta corta: debe ejecutarlo en JRE 9.

Respuesta larga:
Esto se debe a que el tiempo de ejecución de Java se declaró "compatible con DPI" pero realmente no lo admitió para AWT y Swing. Las aplicaciones Java se dimensionaron y representaron en función de los píxeles en lugar de escalarse correctamente, esto incluye las pantallas HiDPI. De todos modos, esto ha sido resuelto recientemente. Vea el problema JEP 263: gráficos HiDPI en Windows y Linux y la upgrade .

Por lo tanto, aumentar el tamaño de la fuente no funciona (porque no aumenta el resto de las cosas); el argumento jvm -Dsun.java2d.dpiaware=false no funciona (porque realmente no es compatible); y el archivo de manifiesto + edición de registro (para Windows) simplemente no funciona.

Solución: debe ejecutarlo en JRE 9 porque realmente es compatible con esta característica.


En Linux , según mis experimentos, no parece posible escalar con ninguna apariencia y sensación de Swing. Sin embargo, es posible hacerlo usando un hack que involucre a VNC, vncdesk . Aquí está mi configuración para ejecutar gradle --gui en vncdesk:

.vncdesk/1/settings.ini :

[desktop] width = 1050 height = 650 [window] title = gradle name = gradle in vncdesk class = GradleInVncdesk scale_factor = 2

.vncdesk/1/startup :

#!/bin/sh cd "$INVOCATION_DIR" matchbox-window-manager& exec gradle --gui "$@"