java swing awt java-7 retina-display

Apple Retina Display Support en Java JDK 1.7 para AWT/Swing



jpanel (4)

De acuerdo con un largo hilo que leí hace algunos meses ( http://lists.apple.com/archives/java-dev/2012/Oct/msg00127.html ), la única forma de obtener Retina en Swing es instalar el Apple JDK. , que a su vez solo usa un "truco" para hacer que las aplicaciones sean compatibles con Retina. Ese hilo menciona a JavaFX como una solución alternativa (que, por supuesto, no es una solución real cuando ya tienes una pieza compleja de software escrita en Swing).

Yo mismo intenté escribir una aplicación JavaFX simple con Java 7 después de leer el hilo anterior y parecía más nítida en Retina; lo mismo con Ensamble (la aplicación de demostración JavaFX, disponible en la App Store) que también parecía renderizar mucho mejor que una aplicación Swing normal (como el Panel de control de Java), pero tal vez sea solo el poder de la sugerencia.

Como estoy probando cada nueva versión de Java 8 Snapshot, también puedo confirmar que se ha hecho poco o ningún trabajo para que Swing parezca aceptable en las pantallas retina.

Nuestra mejor apuesta ahora (solo una opinión, no tengo ningún conocimiento secreto) es que alguien en Oracle (o un colaborador de OpenJDK) comprará un retina mac y lo arreglará en Java 8. No creo que Apple lo arregle mediante el suministro de las correcciones de Java 6 ya que el chico de Apple dijo que acababan de revertir el código relacionado con la reproducción de nuevo a Quartz. Dio el resultado deseado, pero está estrechamente relacionado con las partes internas de OS X patentadas que no están abiertas.

Me acabo de enterar de que AWT / Swing en Java JDK 1.7 (a partir de JDK 7u15) no admite pantallas Retina en Apple Macbook Pro. Netbeans, por ejemplo, es casi insoportable de usar por más de unos minutos corriendo en una pantalla Retina y usando JDK 1.7.

Esto se ha abordado de alguna manera en una pregunta de StackExchange here , y se cita una publicación específica:

Apple 6 Java JRE soportará HiDPI, sin embargo, actualmente no es compatible con Java 7 JRE de Oracle. Tampoco funciona con las últimas compilaciones de desarrollo de Java 8. Las aplicaciones Swing y JavaFX son borrosas en una MacBook Retinia. Esta es la razón por la cual IntelliJ aún corre bajo Java 6.

Mi pregunta es más específica que lo que pide el PO del hilo anterior.

Mi empleador de menos de un mes utiliza Swing en todas sus aplicaciones. Por varias razones, estamos interesados ​​en migrar a Java 7 desde Java 6. En los últimos días, otro desarrollador (que está en Windows), transfirió nuestra plataforma a Java 7. Cuando estoy ejecutando una retina Macbook Pro, me di cuenta el problema cuando saqué la última rama estable de nuestro código.

Soy nuevo en Java con menos de un año de experiencia en la comunidad, de ahí mi pregunta: ¿Será la comunidad de Java bastante receptiva a este problema en el futuro, o debería anticiparse un retraso sustancial (de meses a un año o más) antes de Swing? en Java 7 es compatible con pantallas Apple Retina?


El mes pasado también me interesó el mismo tema y después de un tiempo descubrí en la red que nadie puede responder exactamente la pregunta.

Hay un error abierto para esto en Oracle: http://bugs.sun.com/view_bug.do?bug_id=8000629

De acuerdo con eso debería ser arreglado para Java 1.8. Pero lo que temo es que no estoy seguro de si también se solucionará para Swing o solo para JavaFX. Leí en alguna parte que ya hay una solución para JavaFX (pero no estoy seguro si es oficial), lo que no resuelve el problema para Swing.

Para responder brevemente, después de algunos días de búsqueda en Internet, lamentablemente no pude encontrar la respuesta ...

Saludos, Lubos


Java 7u40 Early Access ahora es compatible con pantallas HiDPI (Retina), como se muestra en este registro de cambios . Entonces, el soporte de Retina ahora está disponible en:

  • Java 6
  • Java 7u40ea o superior
  • Java 8

Retina es totalmente compatible con Oracle a partir de 1.7.0_40ea. Sin embargo, faltan API para Retina. Por ejemplo, no hay soporte para HiDPIScaledImages como en Apple JDK. Puede encontrar algunos consejos geniales sobre el soporte de Retina en Oracle JDK aquí http://bulenkov.com/2013/06/23/retina-support-in-oracle-jdk-1-7/