The::Beastieux

Sangre de Bestia + Corazón de Pingüino | Un blog acerca de Linux, *BSD, Open Source, Software Libre, Programación …

Archivos mensuales: enero 2011

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

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

Código Python – Ordenamiento Quicksort


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método Quicksort:

def quicksort(lista,izq,der):
    i=izq
    j=der
    x=lista[(izq + der)/2]

    while( i <= j ):
        while lista[i]<x and j<=der:
            i=i+1
        while x<lista[j] and j>izq:
            j=j-1
        if i<=j:
            aux = lista[i]; lista[i] = lista[j]; lista[j] = aux;
            i=i+1;  j=j-1;

        if izq < j:
		quicksort( lista, izq, j );
	if i < der:
		quicksort( lista, i, der );

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

A=leeLista()
quicksort(A,0,len(A)-1)
imprimeLista(A,len(A))

Código Python – Ordenamiento por Selección


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método de Selección:

def selectionsort(lista,tam):
    for i in range(0,tam-1):
        min=i
        for j in range(i+1,tam):
            if lista[min] > lista[j]:
                min=j
        aux=lista[min]
        lista[min]=lista[i]
        lista[i]=aux

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

A=leeLista()
selectionsort(A,len(A))
imprimeLista(A,len(A))

Código Python – Ordenamiento por Inserción Binaria


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método de Inserción Binaria:

def insercionBinaria(lista,tam):
    for i in range(1,tam):
        aux=lista[i]
        izq=0
        der=i-1
        while izq<=der:
                m=(izq+der)/2
                if aux < lista[m]:
                        der=m-1
                else:
                        izq=m+1

        j=i-1
        while j>=izq:
                lista[j+1]=lista[j]
                j=j-1
        lista[izq]=aux

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

A=leeLista()
insercionBinaria(A,len(A))
imprimeLista(A,len(A))

Código Python – Ordenamiento Shell


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método Shell:

def ordenShell(lista,tam):
    inc=1
    for inc in range(1,tam,inc*3+1):
        while inc>0:
            for i in range(inc,tam):
                j=i
                temp=lista[i]
                while j>=inc and lista[j-inc]>temp:
                    lista[j]=lista[j-inc]
                    j=j-inc
                lista[j]=temp
            inc=inc/2

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

Código Python – Ordenamiento por Inserción Directa


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método de Inserción Directa:

def insercionDirecta(lista,tam):
    for i in range(1,tam):
        v=lista[i]
        j=i-1
        while j >= 0 and lista[j] > v:
            lista[j+1] = lista[j]
            j=j-1
        lista[j+1]=v

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

A=leeLista()
insercionDirecta(A,len(A))
imprimeLista(A,len(A))

Código Python – Ordenamiento Heapsort


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método Heapsort:

def heapsort(lista,tam):
    for k in range(tam-1,-1,-1):
        for i in range(0,k):
            item=lista[i]
            j=(i+1)/2
            while j>=0 and lista[j]<item:
                lista[i]=lista[j]
                i=j
                j=j/2
            lista[i]=item
        temp=lista[0];
	lista[0]=lista[k];
	lista[k]=temp;

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

A=leeLista()
heapsort(A,len(A))
imprimeLista(A,len(A))

Código Python – Ordenamiento Burbuja


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método de la Burbuja:

def ordenamientoBurbuja(lista,tam):
    for i in range(1,tam):
        for j in range(0,tam-i):
            if(lista[j] > lista[j+1]):
                k = lista[j+1]
                lista[j+1] = lista[j]
                lista[j] = k;

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista

A=leeLista()
ordenamientoBurbuja(A,len(A))
imprimeLista(A,len(A))

PC-BSD 8.2 RC2 Disponible para su Último Testeo


La liberación de PC-BSD 8.2 RC2 (Hubble Edition)está cada vez mas cerca. El equipo de PC-BSD ya ha anunciado el próximo lanzamiento de PC-BSD, mientras tanto, ya se ha puesto a disposición pública lo que viene a ser la última versión beta correspondiente a la versión 8.2 de este estupendo Sistema Operativo. Así mismo, se tiene planificado el lanzamiento oficial dentro de las siguientes 2 o 3 semanas.

Algunas cosas a comentar de lo que se ha incorporado hasta el momento:

  • FreeBSD 8.2RC2
  • KDE 4.5.4
  • Xorg 7.5
  • Nvidia Driver 260.19.29
  • Nvidia Driver 173.14.25
  • Nvidia Driver 96.43.16

Código Java – Función para Convertir un ResultSet a Array


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

Antes había explicado como retornar una consulta a base de datos mediante un CacheRowSet, Ahora explicaré otra de las formas que existe para retornar los datos pasándolos desde un ResultSet hacia un array.

La siguiente función actuará dentro del método que se encargará de establecer la conexión y retornar los datos en forma de un arreglo.

...
    private Object[][] ResultSetToArray(ResultSet rs)
    {
        Object obj[][]=null;

        try
        {

        rs.last();

        ResultSetMetaData rsmd = rs.getMetaData();

        int numCols = rsmd.getColumnCount();

        int numFils =rs.getRow();

        obj=new Object[numFils][numCols];
        int j = 0;

        rs.beforeFirst();

        while (rs.next())
        {
            for (int i=0;i<numCols;i++)
            {

                obj[j][i]=rs.getObject(i+1);
            }
            j++;

        }

        }
        catch(Exception e)
        {

        }

        return obj;
    }
...

Código de Ejemplo:

package beastieux.gui;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author beastieux
 */
public class Ejm15_ResultSetToArray extends JFrame {

    public Ejm15_ResultSetToArray()
    {
        JTable tblEjemplo = new JTable();
        JScrollPane scpEjemplo= new JScrollPane();

        //Llenamos el modelo
        DefaultTableModel dtmEjemplo = new DefaultTableModel(getFilas(),
                                                             getColumnas());

        tblEjemplo.setModel(dtmEjemplo);
        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        this.setSize(500, 200);

        scpEjemplo.setViewportView(tblEjemplo);

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

    //Datos de las filas
    private Object[][] getFilas()
    {
         Object fila[][]=FuncionPostgreSQL("SELECT * FROM tabla");
         return fila;
    }

    //Encabezados de la tabla
    private String[] getColumnas()
    {
          String columna[]=new String[]{"Columna1","Columna2","Columna3"};
          return columna;
    }

    private Object[][] ResultSetToArray(ResultSet rs)
    {
        Object obj[][]=null;

        try
        {

        rs.last();

        ResultSetMetaData rsmd = rs.getMetaData();

        int numCols = rsmd.getColumnCount();

        int numFils =rs.getRow();

        obj=new Object[numFils][numCols];
        int j = 0;

        rs.beforeFirst();

        while (rs.next())
        {
            for (int i=0;i<numCols;i++)
            {

                obj[j][i]=rs.getObject(i+1);
            }
            j++;

        }

        }
        catch(Exception e)
        {

        }

        return obj;
    }

    private Object[][] FuncionPostgreSQL(String sql)
    {

            try
            {
                    Class.forName("org.postgresql.Driver");
                    String url = "jdbc:postgresql://127.0.0.1:5432/postgres";

                    Connection con = DriverManager.getConnection(url, "usuario","contraseña");
                    Statement s = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                                      ResultSet.CONCUR_READ_ONLY);

                    ResultSet rs = s.executeQuery(sql);
                    Object[][] arr = ResultSetToArray(rs);

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

                    return arr;

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

            return null;
    }

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

}

Código Java – Procedimiento para llenar un JTable desde un CachedRowSet


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

En un post anterior se ha definimos a un CachedRowSet como un Resultset con privilegios de manipulación al mantener la conexión cerrada.
El siguiente procedimiento se encargará de pasar los datos contenidos en un CachedRowSet hacia un JTable teniendo como puente a un modelo construido previamente, este procedimiento simplificará la tarea al momento de querer realizar el llenado de un JTable a partir de una CachedRowSet.

...
    private void CachedRowSetToJTable(CachedRowSet crs, DefaultTableModel modelo,JTable tbl)
    {

        try
        {
                ResultSetMetaData rsmd = crs.getMetaData();
                int numCols = rsmd.getColumnCount();

                modelo.setRowCount(0);

                Object []datos = new Object[numCols];

                while (crs.next())
                {
                    for (int i=0;i<numCols;i++)
                    {
                            datos[i]=crs.getObject(i+1);
                    }

                    modelo.addRow(datos);
                }
                tbl.setModel(modelo);
                crs.close();

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

Código de Ejemplo:

package beastieux.gui;

import java.sql.ResultSetMetaData;
import javax.sql.rowset.CachedRowSet;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author beastieux
 */
public class Ejm14_CachedRowSetToJTable extends JFrame{

    DefaultTableModel dtmEjemplo;
    JTable tblEjemplo;
    JScrollPane scpEjemplo;

    public Ejm14_CachedRowSetToJTable()
    {

        tblEjemplo = new JTable();
        scpEjemplo= new JScrollPane();

        //Llenamos el modelo
        dtmEjemplo = new DefaultTableModel(null,getColumnas());

        //Conectar a la Base de datos
        Ejm12_1_ConectarPostgreSQL cnndb = new Ejm12_1_ConectarPostgreSQL();
        CachedRowSet crs = cnndb.Function("SELECT deptno, dname, loc FROM dept");

        //Pasar el CachedRowSet(crs) al JTable(tblEjemplo)
        CachedRowSetToJTable(crs,dtmEjemplo,tblEjemplo);

        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        this.setSize(500, 200);

        scpEjemplo.setViewportView(tblEjemplo);

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

    //Encabezados de la tabla
    private String[] getColumnas()
    {
          String columna[]=new String[]{"Columna1","Columna2","Columna3"};
          return columna;
    }

    private void CachedRowSetToJTable(CachedRowSet crs, DefaultTableModel modelo,JTable tbl)
    {

        try
        {
                ResultSetMetaData rsmd = crs.getMetaData();
                int numCols = rsmd.getColumnCount();

                modelo.setRowCount(0);

                Object []datos = new Object[numCols];

                while (crs.next())
                {
                    for (int i=0;i<numCols;i++)
                    {
                            datos[i]=crs.getObject(i+1);
                    }

                    modelo.addRow(datos);
                }
                tbl.setModel(modelo);
                crs.close();

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

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

}
A %d blogueros les gusta esto: