Este es el Ejemplo #18 del Topic: Programación Gráfica en Java.
En este post vamos a jugar un poco porque aprenderemos a cambiar la apariencia de todos los componentes y contenedores de Java haciendo uso de las librerías del tipo LookAndFeel, todo esto con tan solo unas cuantas lineas de código que servirá para todo el proyecto sin importar de cuantos formularios o frames esté compuesto.
El Framework de java trae ya incluido algunos diseños que podemos usar directamente, esto no quiere decir que sean los únicos, los LookAndFeel podemos crearlo nosotros, personalizarlo o conseguirlo por medio de terceros. En este ejemplo muestro los que trae por defecto y agrego uno más a las librerías del proyecto, que lo encontré en los repositorios de Google Code y me por cierto se ve muy bien; es el seaglasslookandfeel.
Descargar: SeaGlassLookAndFeel
El código mostrará un frame con algunos componentes típicos añadidos, y en un ComboBox, los estilos que tomarán inmediatamente al seleccionarlo. Para empezar, muestro la función que creo es la esencia, el cual recibirá como parámetro el estilo que se dará a la GUI:
... private void setLookAndFeel(String laf) {...if (laf==null) { laf=UIManager.getSystemLookAndFeelClassName(); } else { try { UIManager.setLookAndFeel(laf); } catch (InstantiationException ex) { } catch (ClassNotFoundException ex) { } catch (UnsupportedLookAndFeelException ex) { } catch (IllegalAccessException ex) { } } SwingUtilities.updateComponentTreeUI(this); }
Código de Ejemplo:
/** * seaglasslookandfeel-0.1.5.jar */ package beastieux.gui; import java.awt.GridLayout; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; /** * * @author beastieux */ public class Ejm18_LookAndFeel extends JFrame {}JComboBox cmb1=new JComboBox(); public Ejm18_LookAndFeel() { JPanel pnlEjemplo=new JPanel(); JTextField txt1=new JTextField(); JCheckBox chk1=new JCheckBox("Opcion 1"); cmb1.setModel(new DefaultComboBoxModel (new String[] { "Estilo MetalLookAndFeel", "Estilo MotifLookAndFeel", "Estilo GTKLookAndFeel", "Estilo NimbusLookAndFeel", "Estilo WindowsLookAndFeel", "Estilo SeaGlassLookAndFeel" })); cmb1.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { cmb1ItemStateChanged(evt); } }); JButton btn1=new JButton("Button 1"); pnlEjemplo.add(txt1); pnlEjemplo.add(cmb1); pnlEjemplo.add(chk1); pnlEjemplo.add(btn1); pnlEjemplo.setLayout(new GridLayout(5,1)); this.add(pnlEjemplo); this.setSize(500, 150); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); } private void cmb1ItemStateChanged(java.awt.event.ItemEvent evt) { switch(cmb1.getSelectedIndex()) { case 0: setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); break; case 1: setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); break; case 2: setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel"); break; case 3: setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); break; case 4: setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); break; case 5: setLookAndFeel("com.seaglasslookandfeel.SeaGlassLookAndFeel"); break; default: setLookAndFeel(null); } } private void setLookAndFeel(String laf) { if (laf==null) { laf=UIManager.getSystemLookAndFeelClassName(); } else { try { UIManager.setLookAndFeel(laf); } catch (InstantiationException ex) { } catch (ClassNotFoundException ex) { } catch (UnsupportedLookAndFeelException ex) { } catch (IllegalAccessException ex) { } } SwingUtilities.updateComponentTreeUI(this); } public static void main(String args[]) { Ejm18_LookAndFeel obj = new Ejm18_LookAndFeel(); obj.setVisible(true); }
Pueder ir al artículo principal:
Códigos Sencillos hechos en Java
Quisiera cambiarlo ya
Genial, tu demo, permite no solo ver mas alla de lo que quiero, si no tambien, verlo al instante.
Gracias, buen aporte.
HELP!!!!
\tengo una duda con esta linea!
144 SwingUtilities.updateComponentTreeUI(this);
que funcion esta ejerciendo en el programa,
Excelnte aportacion, apenas vi el codigo y lo entendi, gracias, espero tu respuesta
que tal buenas tardes, primero agradecer por el extensivo aporte que se enfoca a al ayuda para programar, segundo, tengo varias «teras» que necesito resolver y quisiera recibir orientacion acerca de mi codigo, uno de ellos es obtener la serie fibonacci, gracias por el aporte