UIManager: Cambiar colores por defecto de ventanas java

De ChuWiki

UIManager[editar]

UIManager es una clase java que contiene mucha de la información que necesita java para construir los botones, ventanas y demás.

Entre otras cosas, tiene almacenado dentro cuáles son los colores por defecto que tendrá cada uno de los componentes java. El color de fondo de botones, checkbox, pestañas, etc.

Podemos fácilmente cambiar esos colores. El siguiente trocito de código hará que a partir de ese momento todos los botones que instanciemos tengan color blanco

UIManager.put("Button.background", Color.white);

Basta con llamar al método put() y fijar una propiedad "Button.background" con el color que queremos.


Cambiar textos por defecto[editar]

También podemos cambiar los textos por defecto de los botones de las ventanas "prefabricadas" como javax.swing.JOptionPane o javax.swing.JFileChooser, por ejemplo, para ponerlos en español

UIManager.put("OptionPane.yesButtonText","S\u00ED");
UIManager.put("OptionPane.noButtonText","No");
UIManager.put("OptionPane.cancelButtonText","Cancelar");
UIManager.put("OptionPane.okButtonText","Aceptar");

Obtener las propiedades de UIManager[editar]

Para cambiar otros colores de otros componentes necesitaremos saber el nombre de la propiedad de ese color y componente en concreto. ¿Cómo sabemos los nombres de las propiedades de UIManager?. En la API de java no aparece una lista de dichas propiedades, pero este pequeño código nos puede ayudar a obtenerlas:

UIDefaults d = UIManager.getDefaults();
Enumeration<Object> claves = d.keys();
while (claves.hasMoreElements())
   System.out.println(claves.nextElement());

que nos dará el siguiente listado (java 1.5)

class javax.swing.plaf.basic.BasicPanelUI
javax.swing.plaf.basic.BasicPanelUI
class javax.swing.plaf.metal.MetalRootPaneUI
Button.background
class javax.swing.plaf.metal.MetalButtonUI
javax.swing.plaf.metal.MetalButtonUI
javax.swing.plaf.metal.MetalRootPaneUI
TextPane.font
Label.background
OptionPane.warningDialog.titlePane.shadow
ToolTip.foregroundInactive
ToolBar.separatorSize
TabbedPane.tabAreaInsets
FileView.floppyDriveIcon
RootPane.informationDialogBorder
...

No están todas, que son muchas, muchas.