¿Cómo se habilita el anti aliasing en aplicaciones Java arbitrarias?

Muchas aplicaciones Java no usan fonts anti-alias por defecto, a pesar de la capacidad de Swing de proporcionarlas. ¿Cómo se puede forzar una aplicación java arbitraria para usar fonts AA? (tanto para aplicaciones que estoy ejecutando, como para aplicaciones que estoy desarrollando)

Si tiene acceso a la fuente, puede hacerlo en el método principal:

// enable anti-aliased text: System.setProperty("awt.useSystemAAFontSettings","on"); System.setProperty("swing.aatext", "true"); 

o bien (y si no tiene acceso a la fuente, o si esto es más fácil) simplemente puede pasar las propiedades del sistema de arriba a la jvm agregando estas opciones a la línea de comando:

 -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true 

Los controles de giro en las últimas versiones de Java 6/7 deben cumplir automáticamente con las preferencias de todo el sistema. (Si está utilizando Windows L y F en un sistema operativo Windows, entonces el texto debería mostrarse usando ClearType si tiene esa configuración habilitada para todo el sistema.) Entonces, quizás una solución podría ser simplemente: ¿habilitar la apariencia nativa?

En las aplicaciones que está desarrollando, si renderiza su propio texto directamente, también debe hacer algo como esto (en algún momento antes de llamar a Graphics.drawText o sus amigos):

 if (desktopHints == null) { Toolkit tk = Toolkit.getDefaultToolkit(); desktopHints = (Map) (tk.getDesktopProperty("awt.font.desktophints")); } if (desktopHints != null) { g2d.addRenderingHints(desktopHints); } 

Referencia: http://weblogs.java.net/blog/chet/archive/2007/01/font_hints_for.html

Para el registro, he descubierto que en mi máquina con Windows 7,

  • Si no uso esto en mi código, obtengo la agradable representación subpixel de ClearType.
  • Pero si uso esto, obtengo el clásico antialiasing en blanco y negro que es mucho más feo.

Entonces este código debe usarse con cuidado. Supongo que dejará de ser necesario cuando todos los usuarios de Linux se hayan actualizado a las versiones de OpenJDK que manejan correctamente los alias por defecto.

Gracias por la info. Me preguntaba sobre esto yo mismo. Yo uso SoapUI (www.eviware.com) y NO, por defecto, usa el texto AA. Agregué -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true al archivo de proceso por lotes que lo lanza PERO eso no hizo la diferencia. Adivina, tengo que preguntar en su foro.