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

Anuncios

Código Java – Agregar un Componente JCalendar al Proyecto


Este es el Ejemplo #17 del Topic: Programación Gráfica en Java.

En el post anterior hablamos sobre los CheckBoxList, ahora tocaremos otro componente también importante y muy usado que es el Calendar. He encontrado muchos componentes de este tipo pero la mayoría de ellos de pago y otros gratuitos pero sin buen diseño. Al final pude encontrar algo en SourceForge y seguramente podría servirnos mucho; es un JCalendar en dos presentaciones, un frame del calendar como tal y la otra modalidad incrustada en un combo.

Descargar: JCalendar.jar

Luego de descargar el JCalendar.jar vamos a importarlo al proyecto. Para que sea más accesible en el futuro podemos agregar el componente al panel de Beans de la IDE en el cual estamos trabajando y de esa manera solo tendremos que arrastrarlo al contenedor cada vez que tengamos que usarlo.

En el siguiente ejemplo agrego ambas presentaciones del JCalendar a JFrame:

/**
* jcalendar.jar
 */

package beastieux.gui;

import java.awt.FlowLayout;
import javax.swing.JFrame;
import org.freixas.jcalendar.JCalendar;
import org.freixas.jcalendar.JCalendarCombo;

/**
 *
 * @author beastieux
 */
public class Ejm17_JCalendar extends JFrame {
    public Ejm17_JCalendar()
    {
      JCalendar calEjemplo1=new  JCalendar();
      JCalendarCombo calEjemplo2=new  JCalendarCombo();

      this.add(calEjemplo1);
      this.add(calEjemplo2);
      this.setLayout(new FlowLayout());
      this.setSize(400, 300);

      setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    }

    public static void main(String args[]) {
        Ejm17_JCalendar obj = new Ejm17_JCalendar();
        obj.setVisible(true);
    }
}

Código Java – Agregar un Componente CheckBoxList al Proyecto


Este es el Ejemplo #16 del Topic: Programación Gráfica en Java.

A menudo necesitamos hacer uso de algunos componentes especiales pero no contamos con ellos, a veces lo que nos ofrece la plataforma de desarrollo no nos es suficiente y la opción está en crear nuestros propios componentes. Pero sin embargo existe otra posibilidad como comprar componentes de terceros o conseguirlo de manera gratuita, apuesto a que la mayoría lo prefiere de la última forma. Recuerdo que hace tiempo hice un post sobre un buscador de componentes gratuitos para java, es lo que nos ayudará en esta oportunidad.

Uno de esos componentes que tanto necesitamos es el CheckBoxList o CheckListBox como prefieran llamarlo, el cual no lo obtenemos en la lista de componentes por defecto, por lo menos no en NetBeans u otros que he visto, por ello vamos a descargarlo e importarlo al proyecto que estamos desarrollando.

Una vez importado, dentro del JAR descargado tendremos varios otros componentes, pero lo que nos interesa probar ahora es el CheckBoxList que se encuentra en:

com.jidesoft.swing.CheckBoxList

De todos los componentes de este tipo que he encontrado y probado puedo decirles que este es el más recomendado para usarlo. Ahora veamos un ejemplo de como se usa , verán que es super sencillo:

/**
* jide-oss-2.4.8.jar
*/
package beastieux.gui;

import com.jidesoft.swing.CheckBoxList;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;

/**
 *
 * @author beastieux
 */

public class Ejm16_JCheckListBox extends JFrame {

 public Ejm16_JCheckListBox()
 {
 CheckBoxList cblEjemplo = new CheckBoxList();
 JScrollPane scpEjemplo=new JScrollPane();

 DefaultListModel lmdlEjemplo=new DefaultListModel();

 lmdlEjemplo.addElement("Item 0");
 lmdlEjemplo.addElement("Item 1");
 lmdlEjemplo.addElement("Item 2");
 lmdlEjemplo.addElement("Item 3");
 lmdlEjemplo.addElement("Item 4");
 lmdlEjemplo.addElement("Item 5");
 lmdlEjemplo.addElement("Item 6");
 lmdlEjemplo.addElement("Item 7");
 lmdlEjemplo.addElement("Item 8");
 lmdlEjemplo.addElement("Item 9");

 cblEjemplo.setModel(lmdlEjemplo);

 scpEjemplo.add(cblEjemplo);
 this.add(scpEjemplo);

 scpEjemplo.setViewportView(cblEjemplo);
 scpEjemplo.setSize(100, 150);
 this.setLayout(null);
 this.setSize(300, 400);

 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
 }

 public static void main(String args[]) {
 Ejm16_JCheckListBox obj = new Ejm16_JCheckListBox();
 obj.setVisible(true);
 }
}

Código Java – Conexión a Base de Datos Apache Derby (Embebida y Cliente – Servidor)


Este es el Ejemplo #12.3 del Topic: Programación Gráfica en Java, que viene a formar parte del Topic #12 Código Java – Establecer Conexión a Base de Datos con JDBC

Como he explicado en el Topic #12, para realizar las conexiones necesitaremos los drivers respectivos, de acuerdo al motor de base de datos al cual deseemos conectarnos. En este ejemplo estableceremos una conexión con Apache Derby en sus modalidades Embebida y Cliente-Servidor, para el cual es necesario contar con las respectivas librería que pueden ser similares a las que se muestran a continuación:

derby.jar (Embebida)
derbyclient.jar (Cliente - Servidor)

Estas dos librerías corresponden para una base de datos Apache Derby Embebida y Cliente Servidor respectivamente. Si Derby ha sido instalada de la modalidad mostrada en el post Instalación y Ejecución de Apache Derby en Linux, las librerías podrán ubicarse en las siguientes rutas:

/usr/lib/jvm/java-6-sun/db/lib/derby.jar
/usr/lib/jvm/java-6-sun/db/lib/derbyclient.jar

En caso contrario, las librerías deberán ser obtenidas de medios externos.

Ustedes deberán conseguir la librería de acuerdo a la versión de Derby al cual deseen conectarse y establecer los parámetros de conexión como se muestra en el código siguiente:

Conexión a Base de Datos Derby Cliente – Sevidor:

package beastieux.gui;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import javax.sql.rowset.CachedRowSet;
import com.sun.rowset.CachedRowSetImpl;
/**
 *
 * @author beastieux
 */
public class Ejm12_3_ConectarDerby {

    public CachedRowSet Function(String sql)
    {
            try
            {
                    Class.forName("org.apache.derby.jdbc.ClientDriver");

                    String url = "jdbc:derby://localhost:1527/dbtest";

                    Connection con = DriverManager.getConnection(url);
                    Statement s = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                                      ResultSet.CONCUR_READ_ONLY);

                    ResultSet rs= s.executeQuery(sql);

                    CachedRowSet crs = new CachedRowSetImpl();
                    crs.populate(rs);

                    rs.close();
                    s.close();
                    con.close();

                    return crs;

            }
            catch(Exception e)
            {
                   System.out.println(e.getMessage());
            }

            return null;
    }

    public void StoreProcedure(String sql)
    {

            try
            {
                    Class.forName("org.apache.derby.jdbc.ClientDriver");

                    String url = "jdbc:derby://localhost:1527/dbtest";
                    Connection con = DriverManager.getConnection(url);
                    Statement s = con.createStatement();

                    s.execute(sql);

                    s.close();
                    con.close();

            }
            catch(Exception e)
            {
                   System.out.println(e.getMessage());
            }
    }
}

Conexión a Base de Datos Derby Embebida:

package beastieux.gui;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import javax.sql.rowset.CachedRowSet;
import com.sun.rowset.CachedRowSetImpl;
/**
 *
 * @author beastieux
 */
public class Ejm12_3_ConectarDerby {

    public CachedRowSet Function(String sql)
    {
            try
            {
                    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

                    String url = "jdbc:derby:/home/beastieux/dbtest";

                    Connection con = DriverManager.getConnection(url);
                    Statement s = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                                      ResultSet.CONCUR_READ_ONLY);

                    ResultSet rs= s.executeQuery(sql);

                    CachedRowSet crs = new CachedRowSetImpl();
                    crs.populate(rs);

                    rs.close();
                    s.close();
                    con.close();

                    return crs;

            }
            catch(Exception e)
            {
                   System.out.println(e.getMessage());
            }

            return null;
    }

    public void StoreProcedure(String sql)
    {

            try
            {
                    Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

                    String url = "jdbc:derby:/home/beastieux/dbtest";
                    Connection con = DriverManager.getConnection(url);
                    Statement s = con.createStatement();

                    s.execute(sql);

                    s.close();
                    con.close();

            }
            catch(Exception e)
            {
                   System.out.println(e.getMessage());
            }
    }
}

En el caso de conexión a base de datos embebida, la URL contiene la ubicación de la base de datos la cual deberá ser reemplazado de acuerdo a su propia configuración:

String url = "jdbc:derby:/home/beastieux/dbtest";

Métodos de Ordenamiento Hechos en Python


Los primeros posts que realizo sobre Python estarán dedicados a los métodos de ordenamiento. Hasta el momento la codificación en python me ha sorprendido mucho porque es muy sencilla, limpia, no necesitas escribir mucho a comparación de otros lenguajes de programación. Si te gusta la programación te aseguro que python te va a encantar. Aquí les dejos los métodos de ordenamiento escritos en Python:

Método Burbuja: Ordenamiento Burbuja.py
Método Shell: Ordenamiento Shell.py
Método QuickSort: Ordenamiento por método QuickSort.py
Método Inserción Directa: Ordenamiento por inserción Directa.py
Método Inserción Binaria: Ordenamiento por inserción Binaria.py
Método Selección: Ordenamiento método Selección.py
Método HeapSort: Ordenamiento método HeapSort.py