Saltar al contenido

Establecer la opacidad de un JFrame decorado en Java 8

Si hallas algún problema en tu código o proyecto, recuerda probar siempre en un entorno de testing antes añadir el código al trabajo final.

Solución:

Por lo que puedo decir, la respuesta básica es: no es posiblepor lo menos con la apariencia del sistema. Como se indica en el ejemplo de la ventana translúcida de los tutoriales de Java, ¿da problemas a quienes juegan con jdk7?, los JavaDocs indican claramente que “la ventana debe estar sin decorar” por setOpacity() trabajar.

Sin embargo, es posible hacerlo con el (feo) Aspecto y sensación multiplataformaque puede configurar programáticamente de la siguiente manera:

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

De hecho, como la apariencia multiplataforma podría anularse a través de la configuración, lo más seguro sería establecerlo explícitamente en Metal como sigue:

UIManager.setLookAndFeel(new MetalLookAndFeel());

La razón por la que esto funciona es que la implementación de JDK de Frame.setOpacity() lanza una excepción cuando !isUndecorated()y JFrame.frameInit() se establece como sin decorar cuando la apariencia es getSupportsWindowDecorations() devoluciones true. Luego llama a getRootPane().setWindowDecorationStyle() con JRootPane.FRAMElo que indica que las decoraciones serán proporcionadas por el panel de raíz en lugar del marco.

Por lo que puedo ver en el JDK, el aspecto Metal es el único para el que getSupportsWindowDecorations() devoluciones trueya que es el único que lo anula, y la implementación predeterminada simplemente devuelve false.

Sin embargo, algunas apariencias de terceros también lo respaldan. Este es el caso, por ejemplo, de Tiny Look and Feel, como acabo de probar:

Demostración de ventana translúcida con TinyLAF

(Tenga en cuenta que tomé esta captura de pantalla en Ubuntu, ¡TinyLAF tiene un tema predeterminado que se parece a Windows XP!)

Consulte también esta pregunta para obtener una lista de aspectos y sensaciones de terceros conocidos.

Intenta agregar esta línea antes de creando la ventana JFrame:

JFrame.setDefaultLookAndFeelDecorated(true);

Exactamente esa línea, no reemplace JFrame al principio, debe ser JFrame.

(También puede ver esta línea en los tutoriales que mencionó colocados con precisión antes de crear la ventana).

Sección de Reseñas y Valoraciones

Si entiendes que ha sido de utilidad este post, sería de mucha ayuda si lo compartes con más entusiastas de la programación así contrubuyes a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *