Como cambiar el LAF de una aplicación gráfica en Java

Hola a todos, hoy os explicare como podemos cambiar el Look and Feel (LAF) de nuestra aplicación gráfica en Java.

El Look anf Feel de una aplicación es el estilo de los componentes de nuestra aplicación(botones, sombres, formas,etc.), por ejemplo, en Windows los botones son distintos que en Linux, podemos modificar el estilo de nuestra aplicación.

La clase que nos permite modificar el LAF de nuestra aplicación es UIManager, que esta en el paquete javax.swing.

Para cambiar el LAF, usamos el método UIManager.setLookAndFeel(String), donde String sera el nombre del LAF. Este método puede devolver una excepción por lo que debemos capturar la excepción con try-catch, Eclipse nos da como opción capturar estas excepciones.

consejo excepcion eclipse

Podemos saber el LAF del sistema operativo que estamos usando en ese momento, para ello, usaremos el método UIManager.getSystemLookAndFeelClassName(); nos devolverá un String con el nombre del LAF. Por lo que podríamos hacer lo siguiente: UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Si queremos ver que LAF tenemos instalados para que los usemos en nuestra aplicaciones gráficas. El siguiente código devuelve todos los LAF que tenemos:

UIManager.LookAndFeelInfo[] listaLAF=UIManager.getInstalledLookAndFeels();<br />
for(int i=0;i&lt;listaLAF.length;i++){<br />
	System.out.println(listaLAF[i].getClassName());<br />
}

Esto es lo que devuelve:

LAF java

Os dejo un ejemplo que crea una ventana con cada uno de los LAF disponibles.

Ejemplo LAF ventanas

Os dejo el código completo:

import java.awt.EventQueue;<br />
import java.io.*;</p>
<p>import javax.swing.*;<br />
import javax.swing.UIManager.LookAndFeelInfo;</p>
<p>public class EjemploLAF extends JFrame {</p>
<p>	private JPanel contentPane;<br />
	private JTextField textField;</p>
<p>	/**<br />
	 * Launch the application.<br />
	 */<br />
	public static void main(String[] args) {<br />
		EventQueue.invokeLater(new Runnable() {<br />
			public void run() {<br />
				try {<br />
					EjemploLAF frame1 = new EjemploLAF(&quot;LAF Metal&quot;,&quot;javax.swing.plaf.metal.MetalLookAndFeel&quot;);<br />
					EjemploLAF frame2 = new EjemploLAF(&quot;LAF Nimbus&quot;,&quot;javax.swing.plaf.nimbus.NimbusLookAndFeel&quot;);<br />
					EjemploLAF frame3 = new EjemploLAF(&quot;LAF Moti&quot;,&quot;com.sun.java.swing.plaf.motif.MotifLookAndFeel&quot;);<br />
					EjemploLAF frame4 = new EjemploLAF(&quot;LAF Windows&quot;,&quot;com.sun.java.swing.plaf.windows.WindowsLookAndFeel&quot;);<br />
					EjemploLAF frame5 = new EjemploLAF(&quot;LAF Classic Windows&quot;,&quot;com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel&quot;);<br />
				} catch (Exception e) {<br />
					e.printStackTrace();<br />
				}<br />
			}<br />
		});<br />
	}</p>
<p>	/**<br />
	 * Create the frame.<br />
	 */<br />
	public EjemploLAF(String titulo,String LAF)  {</p>
<p>		//Configuracion ventana<br />
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />
		setBounds(100, 100, 450, 300);<br />
		contentPane = new JPanel();<br />
		contentPane.setLayout(null);<br />
		setContentPane(contentPane);</p>
<p>		setTitle(titulo);</p>
<p>		//Componentes<br />
		JButton btnBoton = new JButton(&quot;Boton&quot;);<br />
		btnBoton.setBounds(63, 85, 89, 23);<br />
		contentPane.add(btnBoton);</p>
<p>		JRadioButton rdbtnNewRadioButton = new JRadioButton(&quot;New radio button&quot;);<br />
		rdbtnNewRadioButton.setBounds(63, 37, 109, 23);<br />
		contentPane.add(rdbtnNewRadioButton);</p>
<p>		JCheckBox chckbxNewCheckBox = new JCheckBox(&quot;New check box&quot;);<br />
		chckbxNewCheckBox.setBounds(63, 130, 97, 23);<br />
		contentPane.add(chckbxNewCheckBox);</p>
<p>		textField = new JTextField();<br />
		textField.setBounds(63, 185, 86, 20);<br />
		contentPane.add(textField);<br />
		textField.setColumns(10);<br />
		setVisible(true);</p>
<p>		//Modificamos el LAF de la ventana, controlamos las excepciones</p>
<p>		try {<br />
			UIManager.setLookAndFeel(LAF);<br />
		} catch (ClassNotFoundException e) {<br />
			e.printStackTrace();<br />
		} catch (InstantiationException e) {<br />
			e.printStackTrace();<br />
		} catch (IllegalAccessException e) {<br />
			e.printStackTrace();<br />
		} catch (UnsupportedLookAndFeelException e) {<br />
			e.printStackTrace();<br />
		}</p>
<p>	}<br />
}<br />

Si queremos que según el sistema operativo se adapte el LAF, lo podemos hacer con el siguiente código, copialo dentro del constructor.

try{<br />
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());<br />
        }catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e){<br />
            System.out.println(&quot;Error setting Java LAF: &quot;+e);<br />
        }

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte

Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *