fondo - colorear un jlabel java
Java: ¿cambia el color de fondo del swing? (5)
Ok, tengo una aplicación para columpios usando el aspecto y el sistema "System". Ahora, quiero cambiar el color de fondo de los paneles principales a negro. Demasiado fácil, ¿verdad?
UIManager.put("Panel.background", Color.BLACK);
Bueno, sí, excepto que ahora los controles en la aplicación se ven estúpidos, porque sus ''sombras'', a falta de una mejor palabra, se degradan para desvanecerse hacia el viejo color predeterminado del sistema (ventanas gruesas grises). Entonces, hay "esquinas" de color gris claro en todos los controles, especialmente las pestañas en JTabbedPane. Sé que puede corregirse, porque si cambia el tema de Windows XP a uno con un color de aplicación predeterminado diferente, los controles adquieren este color cambiado y sus sombras se "desvanecen" hacia él.
Pero no tengo idea de qué es la clave UIManager, o incluso si puedes hacerlo con UIManger.
Realmente no quiero cambiar el motor L & F, porque aparte de esto, se ve bien.
Puede probar estos:
- controlar
- controlDkShadow
- controlHighlight
- controlLtHighlight
- controlShadow
(Acabo de encontrarlos en esta lista: Swing [Archivo] - UIManager: configuración de fondo y JScrollBar )
Puede ver cuáles son las configuraciones predeterminadas (y sus claves) usando UIManager.getDefaults (); Luego puede iterar sobre el keySet resultante (es una instancia de Map).
Entonces, algo así mostrará todas las claves predeterminadas:
for (Object key: UIManager.getDefaults().keySet())
{
System.out.println(key);
}
Algunos controles como JButton deben tener setOpaque(false)
llamado para permitir que los nuevos colores de fondo se desvanezcan.
Para enumerar todas las opciones posibles que podemos configurar a UIManager para cambiar LaF, ejecute el siguiente código ........
import java.util.*;
import javax.swing.UIManager;
public class UIManager_All_Put_Options
{
public static void main (String[] args)
{
Hashtable properties = UIManager.getDefaults();
Enumeration keys = properties.keys();
while (keys.hasMoreElements()) {
String key = (String) keys.nextElement();
Object value = properties.get (key);
System.out.printf("%-40s /t %-200s /n", key,value);
}
}
}
disfrutar...
En general, esto es un poco complicado. Depende del LAF exacto que estés usando.
Por ejemplo. JGoodies usa un esquema de color propio que redefine estas cosas.
En general, los nombres de las propiedades se componen como
COMPONENT_NAME_WITHOUT_J + ''.'' + PROPERTY.
Desafortunadamente, los nombres de las propiedades solo se pueden obtener de las clases de implementación de LaF. Estos no son compartidos o algo así. Cada componente tiene su propio. O mejor, depende de la pereza del autor que las parejas usaba. En general.
Una gran cantidad de ayuda redefine Panel. * Y Button. . Muchos componentes usan Button. propiedades.
Prueba, juega, gana :). Te deseo suerte :).
PD: hay muchas propiedades para sobrescribir. Pero esta es la forma en que funciona LaFs.