2009-07-09 9 views
8

Tengo una aplicación Java que utiliza Sustancias LookAndFeel con Windows como la plataforma de destino y quiero aumentar la configuración de PPP de mi aplicación sin cambiando la configuración del sistema.¿Puedo establecer la resolución de DPI de mi aplicación Java Swing sin cambiar la configuración de DPI del sistema?

quiero hacer esto porque no quiero obligar al usuario a reiniciar Windows y porque muchas aplicaciones de Windows parecen tener problemas con configuraciones muy altas (> 120 DPI)

PD: yo sepa que el Substance LaF permite escalar el tamaño de fuente en tiempo de ejecución, pero de esa manera solo se escala la altura de mis controles, no el ancho. Quiero que mi GUI esté completamente escalada como sucedería si establezco la configuración de DPI del sistema.

+1

+1, solo iba a hacer la misma pregunta. :) – Epaga

Respuesta

5

No sé si eso es posible. El aspecto & tendría que soportarlo, y hasta donde yo sé, Windows Look & Feel no tiene. Aquí hay un truco que puede considerar: itere a través de todas las fuentes definidas en su apariencia & y redefinirlas para que sean un poco más grandes. Aquí es un fragmento de código que hace esto:

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

supongo que se podría llevar esto un paso más allá y redefinir las fronteras escala proporcionalmente también, pero que vuelve muy complicado muy rápidamente

+0

La mejor respuesta hasta el momento :) –

+1

Si su 'UIManager' tiene claves que no son' Strings', esto arrojará una 'ClassCastException'. – uckelman

+0

No funciona debido a la conversión a cadenas. – Pavel

1

Así que la respuesta real parece ser: no, no puedes. Eso realmente es un fastidio porque es un dolor de prueba.

1

Sí, puede, pero debe ejecutarlo en JRE 9.

Esto se debe a que el tiempo de ejecución de Java declaró ser "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. Consulte el problema JEP 263: HiDPI Graphics on Windows and Linux y 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 era 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.

Cuestiones relacionadas