Look and Feel en Java

La apariencia de una aplicación puede hacer  que el usuario se decida por ella, o por lo menos, que le dé un chance. Tanto es así, que muchos programadores profesionales la utilizan como un gancho para atraer a sus clientes, a pesar de requerir más tiempo y dedicación. En java, existe una forma muy sencilla con la que podemos darle un toque más agradable a nuestras aplicaciones, en tan solo un par de líneas. Se trata de los Looks and Feels, un mecanismo que funciona parecido a instalar un theme para un SO y que permite cambiar el aspecto de las ventanas, botones, cuadros de diálogos y demás componentes que integran una Interfaz de usuario. Los L&F, se distribuyen generalmente en forma de plugin contenidos en archivos .JAR, aunque si lo deseas, puedes crear tus propios estilos. Las diferentes versiones del JDK, incluyen varios L&F, Java Look And Feel o Metal (el que trae por defecto), CDE o Motif, Nimbus (solo en versiones superiores a 1.6) y Windows , Mac OS y Linux según el SO.

En el siguiente código se muestra un método que vamos a suponer, por razones prácticas, pertenece a una clase que hereda de JFrame:

public void setLookAndFeel() throws Exception {
UIManager.setLookAndFeel(new WindowsLookAndFeel());
SwingUtilities.updateComponentTreeUI(this);
}

Bien, en la primera línea después de la declaración, llamamos al método estático setLookAndFeel(LookAndFeellf) de la clase javax.swing.UIManager, el mismo se encarga de cambiar el L&F de la aplicación recibiendo como parámetro una instancia del que deseamos, en este caso Windows,que se encuentra en  com.sun.java.swing.plaf.windows.WindowsLookAndFeel. Este método lanza una excepción por lo que debe ser tratada a través de la cláusula throws o  utilizando un bloque try/catch. En la segunda línea, utilizamos la clase javax.swing.SwingUtilities y su método updateComponentTreeUI(Component c)al cual le pasamos la referencia this para que se actualicen todos los componentes, recuerden que el método está dentro de una clase que hereda de JFrame.

Agregando este método a nuestra clase y luego llamándolo desde donde queramos, es suficiente para cambiar el L&F. Ahora, si queremos que nuestra aplicación adopte la apariencia del SO donde se está ejecutando, ya sea Windows, Linux, Mac OS, Solaris etc., lo que debemos hacer es utilizar una versión sobrecargada del método setLookAndFeel(StringClassName) el cual recibe por parámetro un String con el nombre de la clase del l&F,  y pasarle entonces el método getSystemLookAndFeelClassName() también de la clase javax.swing.UIManager, luego actualizar, quedaría así:

public void setLookAndFeel() throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());                 
SwingUtilities.updateComponentTreeUI(this);
}

Como dije anteriormente, existen muchos  L&F en forma de plugin, para utilizarlos, es el mismo procedimiento, solo que primero, debemos agregar el JAR al classpath del proyecto.Enlos siguientes fragmentos de código se muestran dos formas de utilizar un L&F desde un plugin, en este caso desde el archivo JTattoo.jar:

/*Utilizamos un L&F de la libreriaJTattoo creando una instancia del mismo*/ UIManager.setLookAndFeel(new AeroLookAndFeel());
/*Ponemos el mismo L&F desde JTattoo, la diferencia es que en este caso le pasamos el nombre de la clase en vez de una instancia*/
UIManager.setLookAndFeel(“com.jtattoo.plaf.aero.AeroLookAndFeel”);

Para terminar quisiera decir que no deberíamos pasar por alto el cómo lucen nuestras aplicaciones, porque, aunque la mayoría de las veces nos centramos más en las funcionalidades del sistema, el usuario suele fijarse en otros detalles, y precisamente en esos detalles, radica el éxito de la aplicación.

Antes:

1

Después:

2

En este artículo, incluí  unas fotos, en las cuales se muestra el source de un ejemplo más completo sobre los L&F, también les dejo un demo creado sobre JTattoo, donde podrán observar la potencialidad de los L&F, solo deben ejecutar “JTattooDemo.jar”.