Código Java – Cambiar la Apariencia de la Interfaz Gráfica con LookAndFeel


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);
    }
}

Gnome 3.0 = Gnome 2.30


Gnome 2.30 que será lanzado al concluir su ciclo de 6 meses de desarrollo, será llamado a partir de entonces Gnome 3.0, el cual va de la mano con el desarrollo de GTK 3.0,  las metas no son tan ambiciosas, pero vale la pena si lo primordial es resguardar la estabilidad con la que siempre viene operando.

Fuente: vivalinux

Gnome para PC-BSD


Esta es una noticia ya no tan nueva, me hubiera gustado postearlo hace tiempo, pero mis problemas con el tiempo no me dejaban postear tan a menudo, pues hoy he regresado a estas andanzas.

Tal vez fue una de las mas gratas noticias que recibí por parte del equipo de PC-BSD, un PBI de GNOME.

Para empezar, a mi no me molestaba en absoluto trabajar con KDE sobre PC-BSD, pero ahora que está disponible Gnome para ser instalado de una manera sencilla, me sentirè como pez en el agua, nadando sobre lo que siempre ha sido mi GUI preferida, y seguramente también para muchos otros usuarios esta noticia cae rebien.

Hace tiempo intenté instalar gnome desde los ports de FreeBSD, pero siempre terminaba en algunos problemillas que no me gustaba nada, era muy trabajoso instalarlo via ports, y que va, ahora no podré decir lo mismo.

Este PBI de Gnome 2.22 ha sido creada para PC-BSD Edison 1.5

Descargue el Gnome PBI (413Mb)

Compiz Fusion en Debian Lenny


Acabo de actualizar y ordenar mi Debian Lenny, y ahora k tenia un poko de tiempo me dio las ganas de probar el efecto compizfusion…

Solo hacía falta agregar unos links hacia los repositorios:

### Debian Stable

deb http://download.tuxfamily.org/shames/debian-etch/desktopfx/stable/ ./

### Debian Testing (repositorio inestable)

deb http://download.tuxfamily.org/shames/debian-lenny/desktopfx/unstable/ ./

### Debian Testing (repositorio estable)

deb http://download.tuxfamily.org/shames/debian-lenny/desktopfx/stable/ ./

### Debian Unstable (repositorio inestable)

deb http://download.tuxfamily.org/shames/debian-sid/desktopfx/unstable/ ./

### Debian Unstable (repositorio estable)

deb http://download.tuxfamily.org/shames/debian-sid/desktopfx/stable/ ./

GNOME 2.22 en FreeBSD


GNOME 2.22 ya está disponible también para FreeBSD, con algunas particularidades destacables:

  • Un actualizado port de HAL para soportar los dispositivos de video4linux.
  • Una gran actualización para GStreamer.
  • DRM (Direct Rendering).

No olviden consultar el documento UPDATING por los pasos correctos para actualizar todos sus ports de GNOME.