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)

Gnome 2.22


Para los usuarios las novedades incluyen Cheese, un programa para tomar fotografías y grabar vídeo con una cámara web. En Totem se ha añadido soporte para YouTube y MythTV, mejora del soporte para la reproducción de DVD, soporte de televisión digital (DVB) y búsqueda de archivos usando Tracker.

Por otro lado la nota del lanzamiento comienzan con un emotivo recuerdo a Raphael Hignio, colaborador de GNOME Brasil, fallecido en un accidente de moto el año pasado.

El reloj del panel ahora muestra la zona horaria con un mapa con las franjas de luz solar, además del clima y la temperatura, si bien resulta un poco pesado al cargarse. Evolution incorpora soporte paralos calendarios de Google.

Inclusión de un decodificador de archivos Flash libre (swfdec). Se han simplificado algunas opciones de teclado y ratón. Se ha añadido soporte para 7-Zip (LZMA) en File-Roller. Adición de cuadernos de notas en Tomboy. Inicio de la integración de PolicyKit y sustitución del Gestor de depósitos de claves por Seahorse.

Inicio de la sustitución de GnomeVFS por los nuevos GIO y GVFS. Soporte integrado para la composición de ventanas en el escritorio (Compiz). Anjuta y sus módulos entran en la plataforma de desarrollo.

Para los Hispanos esta todo en español, hasta la documentación.

El futuro de Gnome

El desarrollo no solo termina con GNOME 2.22. Ya se está trabajando en GNOME 2.24, cuya versión se liberará exactamente seis meses después de 2.22.

Algunas de las cosas en las que se están pensando para GNOME 2.24 son:

  • Una nueva versión del cliente VoIP de GNOME, Ekiga, cuenta con una interfaz renovada y soporte de presencia SIP;

  • El cliente de mensajería instantánea Empathy que usa el «framework» de comunicaciones Telepathy;

  • La vista de columna y lista tan solicitada en el Gestor de archivos de GNOME;

    Descargas: Bitorrent

  • copy & paste: somoslibres