Muchas veces hemos querido cambiar el aspecto de nuestras aplicaciones Java (En caso de crear alguna Interfaz Gráfica) ya que el tema METAL que usa por defecto no es muy vistoso que digamos, a esto se le conoce como Look And Feel.
En esta ocasión les mostraré como utilizar algunos de los temas que vienen por defecto junto con nuestro JDK, eso quiere decir que no necesitamos instalar ninguna librería ni nada por el estilo.
Les mostraré como realizar esto de manera Estática y Dinámica, ¿Qué quiere decir esto? La forma estática quiere decir que configuraremos un tema diferente al que java usa por defecto, este no se podrá cambiar durante la ejecución de la aplicación, así que si este es nuestro fin debemos realizarlo de este manera.
Por el contrario, si lo que deseamos es que nuestra interfaz pueda cambiar de tema las veces que queramos durante su ejecución; debemos optar por la forma Dinámica. Sin más rodeos vamos al grano.
Look and Feel Estático
No entraré en detalles sobre como crear una ventana o como agregar los componentes gráficos necesarios, pero funciona si utilizamos un IDE como Jcreator, Netbeans, Eclipse, etc.
Este es un ejemplo del tema denominado METAL que java utiliza por defecto
Para cambiarlo necesitamos colocar el siguiente código en el constructor de nuestra clase que representará la interfaz gráfica, por ejemplo al utilizar NetBeans, Agregamos un JFrame Form, se nos pedirá el nombre del mismo y listo, luego vamos al constructor de la clase que tiene el mismo nombre que le pusimos al JFrame y justo antes de la llamada el metodo initComponents() colocamos lo siguiente
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
Como argumento debemos pasarle el string que corresponde a los temas que vienen por defecto en el JDK, más adelante hablaremos sobre esto. La parte de UIManager nos la mostrará como error de sintaxis, solo necesitamos importar de la librería estándar de java el modulo UIManager (En el inicio de la clase y después de la sentencia package) y encerrar el código anterior dentro de una sentencia try-catch
Importando el modulo UIManager para poder utilizar nuestro tema
import javax.swing.UIManager;
Sentencia para cambiar nuestro Look and Feel
try{ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); }catch(Exception e){ e.printStackTrace(); }
Ahora corremos nuestra aplicación y veremos el resultado
Vemos como el aspecto de los componentes ha cambiado, similar a los componentes de los sistemas Microsoft Windows, si recuerdan el argumento que pasamos a la función setLookAndFeel() era el siguiente: "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
El cual corresponde al tema de Windows, a continuación les dejo el String y la imagen de como se ven los temas que se encuentran instalados en mi sistemajavax.swing.plaf.metal.MetalLookAndFeel
javax.swing.plaf.nimbus.NimbusLookAndFeel
com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel
Así que no nos queda más que colocar el que más nos guste y listo.
Look And Feel Dinámico
Para hacer que nuestra aplicación cambie entre todos los temas disponibles durante su ejecución definiremos una interfaz como la siguiente, lo más importante es un jComboBox y un jButton
el jComboBox nos servirá para mostrar todos los look and feel disponibles, a manera de solo seleccionarlo y al dar click al boton Cambiar Look que se aplique el que hayamos seleccionado
Debemos importar los siguientes modulos:
import javax.swing.UIManager;import javax.swing.SwingUtilities;
El primero ya hemos visto que es necesario para seleccionar un look and feel especifico, y el segundo modulo nos servirá para actualizar los componentes una vez cambiado nuestro tema
Creamos una variable del tipo array del tipo LookAndFeelInfo el cual nos servirá para obtener todos los temas instalados
En el constructor de nuestra clase (antes del método InitComponents()), colocaremos un ciclo for para recorrer el array que declaramos anteriormente y así almacenar en el jComboBox por medio de la funcion addItem; los nombres de los temas que contiene. Con System.out.println() mostraremos en la consola de NetBeans los temas instalados para poderlo copiar y pegar si deseamos cambiar el tema de manera estática (ver la primera parte al principio de este tutorial)
Ahora para finalizar, en el evento del Boton que agregamos a la interfaz (Doble click al boton en modo diseño si se utiliza NetBeans) colocamos las siguientes sentencias:
En la variable del tipo String llamada look obtendremos el nombre del tema que esté seleccionado en el jComboBox1, a continuación fijaremos el tema usando la función setLookAndFeel y pasando como argumento la cadena llamada look, y por ultimo con la sentencia updateComponentTreeUI() del modulo SwingUtilities actualizaremos el tema de los componentes, de no poner está ultima linea nuestra aplicación no aplicará el tema seleccionado.
Y así funcionará nuestra aplicación:
Seleccionamos en el jComboBox el tema que nos guste, y luego damos click en el botón Cambiar Look que ejecutará la porción de código que agregamos a su evento. Este ejemplo se los dejaré en ESTE ENLACE para que lo puedan probar, Deben abrirlo con Netbeans 7.3 y tener instalado el JDK 1.7 update 21, en dado caso no tuvieran alguno de estos dos, pueden bajarlo y abrir con un Notepad el archivo GUI.java para verificar el código e implementarlo en el entorno que tengan ya que no utilicé ninguna herramienta especial de Netbeans o del JDK 7.... Esto es compatible desde el JDK 1.6.... espero que les sea de utilidad
Creamos una variable del tipo array del tipo LookAndFeelInfo el cual nos servirá para obtener todos los temas instalados
UIManager.LookAndFeelInfo[] lafinfo = UIManager.getInstalledLookAndFeels();
En el constructor de nuestra clase (antes del método InitComponents()), colocaremos un ciclo for para recorrer el array que declaramos anteriormente y así almacenar en el jComboBox por medio de la funcion addItem; los nombres de los temas que contiene. Con System.out.println() mostraremos en la consola de NetBeans los temas instalados para poderlo copiar y pegar si deseamos cambiar el tema de manera estática (ver la primera parte al principio de este tutorial)
for (int i=0;i<lafinfo.length;i++){ jComboBox1.addItem(lafinfo[i].getClassName()); System.out.println(lafinfo[i].getClassName()); }
Ahora para finalizar, en el evento del Boton que agregamos a la interfaz (Doble click al boton en modo diseño si se utiliza NetBeans) colocamos las siguientes sentencias:
try{ String look = jComboBox1.getSelectedItem().toString(); UIManager.setLookAndFeel(look); SwingUtilities.updateComponentTreeUI(this); }catch(Exception e){ e.printStackTrace(); }
En la variable del tipo String llamada look obtendremos el nombre del tema que esté seleccionado en el jComboBox1, a continuación fijaremos el tema usando la función setLookAndFeel y pasando como argumento la cadena llamada look, y por ultimo con la sentencia updateComponentTreeUI() del modulo SwingUtilities actualizaremos el tema de los componentes, de no poner está ultima linea nuestra aplicación no aplicará el tema seleccionado.
Y así funcionará nuestra aplicación:
Seleccionamos en el jComboBox el tema que nos guste, y luego damos click en el botón Cambiar Look que ejecutará la porción de código que agregamos a su evento. Este ejemplo se los dejaré en ESTE ENLACE para que lo puedan probar, Deben abrirlo con Netbeans 7.3 y tener instalado el JDK 1.7 update 21, en dado caso no tuvieran alguno de estos dos, pueden bajarlo y abrir con un Notepad el archivo GUI.java para verificar el código e implementarlo en el entorno que tengan ya que no utilicé ninguna herramienta especial de Netbeans o del JDK 7.... Esto es compatible desde el JDK 1.6.... espero que les sea de utilidad