UIManager: Cambiar colores por defecto de ventanas java
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.