The::Beastieux

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

Archivos por Etiqueta: Tutoriales

Códigos Sencillos hechos en Python


Aquí les dejo algunos códigos sencillos en Python que me puse a escribir cuando aún no sabía mucho de éste; útil para quienes quieren empezar a conocer este lenguaje de programación y comprender un poco el concepto de las listas sin hacer mucho uso de funciones especiales. Con un poco más de conocimiento sobre la sintaxis de python es muy probable que logren reducir el número de lineas de código por la sencillez  que representa este Lenguaje de Programación.

Código Python – Encontrar Posición de un Elemento en un Lista
Código Python – Concatenar Elementos de Dos Listas
Código Python – Eliminar Un Elemento de una Lista
Código Python – Eliminar Un Elemento de una Lista mediante su Indice
Código Python – Insertar Un Elemento en una Lista
Código Python – Determinar Si dos Listas son Iguales.
Código Python – Inclusión de Listas como Conjunto
Código Python – Intersección de Listas como Conjunto
Código Python – Unión de dos Listas como Conjunto
Código Python – Promedio de los Elementos de una Lista
Código Python – Moda de los Elementos de una Lista
Código Python – Suma de los Elementos de una Lista
Código Python – Suma de Elementos Pares de una Lista
Código Python – Suma de Elementos Impares de una Lista
Código Python – Potencia de los Elementos de una Lista elevados a su Indice
Código Python – Potencia de los Elementos de una Lista

Código Java – Modificar Ficheros de Propiedades en Tiempo de Ejecución


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

Nuevamente jugando con el ResourceBundle y los ficheros de propiedades, pero a diferencia del post realizado anteriormente respecto a este tema ahora no solo veremos como acceder a los datos del fichero de propiedades, si no también poder editarlos.

Esto es muy importante porque su uso no radicará solo en desarrollar aplicaciones multi-lenguaje, sino para poder generar ficheros de configuración donde podamos almacenar datos que cambian esporádica o frecuentemente, por ejemplo, los de acceso a base de datos, establecer un idioma, una apariencia, los items seleccionados en las preferencias de la aplicación, directorios donde se almacenarán registros, etc, es decir, información externa que no requiera almacenarse en una base de datos al estilo de un cache, por ello usaremos simples ficheros de propiedades.

En el ejemplo siguiente usaremos los ficheros de propiedades creados en el post  Código Java – Internacionalización de Aplicaciones con ResourceBundle, la mayor parte del código es el mismo excepto que esta vez no nos enfocamos a la internacionalización.

Este es el procedimiento necesario para poder realizar nuestro objetivo, donde:

fichero: Ubicación del fichero .properties.
key: Palabra Clave dentro del fichero .properties.
values: Nuevo valor que reemplazará al anterior.

...
    private void escribirProperties(String fichero, String key, String value)
    {
                // Crear el objeto archivo
		File archivo = new File(this.getClass().getResource(fichero).getFile().replace("%20", " "));
		//Crear el objeto properties

                System.out.println(archivo);

		Properties properties = new Properties();
		try {
			// Cargar las propiedades del archivo
			properties.load(new FileInputStream(archivo));
			properties.setProperty(key,value);
			// Escribier en el archivo los cambios
                        FileOutputStream fos=new FileOutputStream(archivo.toString().replace("\\", "/"));

                        properties.store(fos,null);

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

Código de Ejemplo:

/**
*Modificamos el valor del Keyword: beastieux.gui.Ejm19_Internacionalizacion.lbl3
*Del fichero /beastieux/language/LANG_es_PE.properties", creado en el Post 19.
 */

package beastieux.gui;

import java.awt.GridLayout;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.ResourceBundle;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

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

    JLabel lbl1;
    JLabel lbl2;
    JLabel lbl3;
    JTextField txt1;
    JTextField txt2;
    JTextField txt3;
    JComboBox cmb1;
    JButton btn1;

    public Ejm23_EscribirFicheroProperties()
    {

        lbl1=new JLabel();
        txt1=new JTextField();

        lbl2=new JLabel();
        txt2=new JTextField();

        lbl3=new JLabel();
        cmb1=new JComboBox();
        cmb1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmb1ItemStateChanged(evt);
            }
        });

        cmb1.addItem("Español");

        txt3=new JTextField();

        btn1=new JButton("Cambiar Etiqueta 3");
        btn1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn1ActionPerformed(evt);
            }
        });

        this.add(lbl1);
        this.add(txt1);
        this.add(lbl2);
        this.add(txt2);
        this.add(lbl3);
        this.add(cmb1);
        this.add(btn1);
        this.add(txt3);
        this.setLayout(new GridLayout(4,2));
        this.setSize(500, 150);

        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {
        ResourceBundle.clearCache();
        escribirProperties("/beastieux/language/LANG_es_PE.properties",
                           "beastieux.gui.Ejm19_Internacionalizacion.lbl3",
                           this.txt3.getText());

        setBundles("beastieux.language.LANG_es_PE");
    }

    private void cmb1ItemStateChanged(java.awt.event.ItemEvent evt) {

        switch(cmb1.getSelectedIndex())
        {
            case 1:setBundles("beastieux.language.LANG_es_PE"); break;
            default:setBundles("beastieux.language.LANG");
        }
    }

    private void setBundles(String propertyFile)
    {
            ResourceBundle rb = ResourceBundle.getBundle(propertyFile);

            String keyBundle="beastieux.gui.Ejm19_Internacionalizacion";

            this.setTitle(rb.getString(keyBundle + ".this"));
            this.lbl1.setText(rb.getString(keyBundle + ".lbl1"));
            this.lbl2.setText(rb.getString(keyBundle + ".lbl2"));
            this.lbl3.setText(rb.getString(keyBundle + ".lbl3"));

    }

    private void escribirProperties(String fichero, String key, String value)
    {
                // Crear el objeto archivo
		File archivo = new File(this.getClass().getResource(fichero).getFile().replace("%20", " "));
		//Crear el objeto properties

                System.out.println(archivo);

		Properties properties = new Properties();
		try {
			// Cargar las propiedades del archivo
			properties.load(new FileInputStream(archivo));
			properties.setProperty(key,value);
			// Escribier en el archivo los cambios
                        FileOutputStream fos=new FileOutputStream(archivo.toString().replace("\\", "/"));

                        properties.store(fos,null);

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

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

Código Java – Autoajustar Imágenes en un Contenedor


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

Con el siguiente ejemplo aprenderemos a subir imágenes para mostrarlos en nuestros contenedores de java, y no solo eso, si no también como deben ser autoajustados al contenedor en el que se encuentra, de esa manera eliminamos los problemas de escalamiento que suele ocurrir por defecto si no se hace uso de una función que realice este trabajo.

Para este ejemplo contamos con 2 funciones básicas, la primera para presentar la imágen y la otra para autoajustarlo al componente que lo contiene:

...
    private void setImagen()
    {
        lbl.setIcon(ajustarImagen("/home/beastieux/MiImagen.png"));
        lbl.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
    }
...
...
    private ImageIcon ajustarImagen(String ico)
    {
        ImageIcon tmpIconAux = new ImageIcon(ico);
        //Escalar Imagen
        ImageIcon tmpIcon = new ImageIcon(tmpIconAux.getImage().getScaledInstance(200, 200, Image.SCALE_DEFAULT));
        return tmpIcon;
    }
...

Código de Ejemplo:

package beastieux.gui;

import java.awt.FlowLayout;
import java.awt.Image;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

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

    JLabel lbl;

    public Ejm22_SubirImagen()
    {
        lbl = new JLabel();

        this.add(lbl);
        this.setSize(200,200);
        this.setLayout(new FlowLayout());
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    }

    private void setImagen()
    {
        lbl.setIcon(ajustarImagen("/home/beastieux/MiImagen.png"));
        lbl.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
    }

    private ImageIcon ajustarImagen(String ico)
    {
        ImageIcon tmpIconAux = new ImageIcon(ico);
        //Escalar Imagen
        ImageIcon tmpIcon = new ImageIcon(tmpIconAux.getImage().getScaledInstance(200, 200, Image.SCALE_DEFAULT));
        return tmpIcon;
    }

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

}

Código Java – Redimensionar Matrices sin Borrar Registros con Redim Preserve


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

Este será un post corto. Muchas veces mientras programamos hemos tenido la necesidad de re-dimensionar las matrices que ya hemos declarado sin perder los datos que ya tengamos registrados en ella, pues esto es tarea sencilla en otros lenguajes de programación pero no quiere decir que en java no lo sea. El siguiente procedimiento se encargará de ello. Lo que hará es recibir una matriz y un entero indicando el nuevo tamaño de la matriz y lo redimencionará automáticamente:

...
    public void redimPreserve(Object obj[],int i)
    {
        if(i>obj.length)
        {
            Object[] tempVar = new Object[i];
            if (obj != null)
                    System.arraycopy(obj, 0, tempVar, 0, Math.min(obj.length, tempVar.length));
            obj = tempVar;
        }
    }
...

Código de Ejemplo:

package beastieux.gui;

import javax.swing.JOptionPane;

/**
 *
 * @author beastieux
 */
public class Ejm21_RedimPreserve {

    public void redimPreserve(Object obj[],int i)
    {
        if(i>obj.length)
        {
            Object[] tempVar = new Object[i];
            if (obj != null)
                    System.arraycopy(obj, 0, tempVar, 0, Math.min(obj.length, tempVar.length));
            obj = tempVar;
        }
    }

    public static void main(String args[])
    {
        Ejm21_RedimPreserve obj = new Ejm21_RedimPreserve();

        String []a_num;

        a_num = new String[] {"1","2","3"};
        for(int i=0;i<a_num.length;i++)
            JOptionPane.showMessageDialog(null, a_num[i]);

        obj.redimPreserve(a_num,5);

        JOptionPane.showMessageDialog(null, "Después del redim preserve");

        a_num = new String[] {"1","2","3","4","5"};

        for(int i=0;i<a_num.length;i++)
            JOptionPane.showMessageDialog(null, a_num[i]);
    }
}

Código Java – Abrir Reportes Creados con JasperReports


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

Los reportes son otras de las utilidades más importantes en las aplicaciones ya que su función es dar al usuario información ordenada y limpia así como un formato adecuado para poder ser llevado a impresión o almacenarlo en algún tipo de fichero como .doc, .odt, pdf, etc.

Recuerdo que hace muchos post anteriores hablé sobre JasperReports, una herramienta Open Source para emitir reportes en Java. Pueden usarlo externamente descargándolo desde jasperforge, o instalar el complemento en netbeans como se explicó en el post mencionado (Instalación de JasperReports).

El siguiente paso es realizar el reporte, que no es nada complicado, basta con establecer la conexión a la base de datos que deseemos, arrastrar los campos de las tablas que necesitemos y ordenarlos, darle un formato decente y ya está, al guardarlo debe generarse un fichero .jrxml, al cual invocaremos desde nuestro código fuente.

Antes de continuar, debemos contar en el proyecto con la librería:

jasperreports-3.7.6.jar

Si antes se instaló el JasperReports es posible que la librería ya lo tengamos en el ordenador, incluso el IDE de desarrollo lo tiene indexado, solo deberá ser añadido a proyecto.

Otras de la librerías que necesitaremos están comentados en el encabezado del código de Ejemplo.

El siguiente procedimiento va a recibir como parámetro la ubicación del reporte dentro del proyecto, para ello será necesario incluir los reportes en algún directorio dentro del proyecto en el que trabajamos, en mi caso la estructura es la siguiente:

beastieux --> reports --> MyReporte.jrxml

...

 private void abrirReporte(String archivo)

    {

        try {

            JasperReport report = JasperCompileManager.compileReport(archivo);

            JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), coneccionSQL());

            JasperViewer.viewReport(print, false);

        } catch (JRException jRException) {

            System.out.println(jRException.getMessage());

        }

    }

...

La linea de código encargada de general la ruta absoluta de la ubicación del reporte es el siguiente:


...

getClass().getResource("/beastieux/reports/MiReporte.jrxml").getPath()

...

Además, algo muy importante que se necesita para abrir el reporte es la conexión a la base de datos. En este ejemplo lo hice con PostgreSQL, ustedes pueden hacerlo con el que gusten, pueden verlos en los ejemplos de conexión a diferentes base de datos realizados en los post anteriores de este tutorial. Como observarán, la función coneccionSQL() nos retorna la conexión a la base de datos, el cual será usado directamente como tercer parámetro en la linea:


...

JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), coneccionSQL());

...

Código de Ejemplo:


 /**

 * jasperreports-3.7.6.jar

 * commons-digester-1.7.jar

 * commons-logging-1.0.4.jar

 * commons-collections-2.1.1.jar

 * commons-beanutils-1.8.0.jar

 */

package beastieux.gui;

import java.awt.CardLayout;

import java.sql.Connection;

import java.sql.DriverManager;

import java.util.HashMap;

import javax.swing.JButton;

import javax.swing.JFrame;

import net.sf.jasperreports.engine.JRException;

import net.sf.jasperreports.engine.JasperCompileManager;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.view.JasperViewer;

/**

 *

 * @author beastieux

 */

public class Ejm20_JasperReport extends JFrame {

    public Ejm20_JasperReport()

    {

        JButton btn1=new JButton("Abrir Reporte");

            btn1.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {

                btn1ActionPerformed(evt);

            }

        });

        this.add(btn1);

        this.setLayout(new CardLayout());

        this.setSize(200,100);

        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    }

    private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {

        abrirReporte(getClass().getResource("/beastieux/reports/MiReporte.jrxml").getPath());

    }

    private void abrirReporte(String archivo)

    {

        try {

            JasperReport report = JasperCompileManager.compileReport(archivo);

            JasperPrint print = JasperFillManager.fillReport(report, new HashMap(), coneccionSQL());

            JasperViewer.viewReport(print, false);

        } catch (JRException jRException) {

            System.out.println(jRException.getMessage());

        }

    }

    private Connection coneccionSQL()

    {

            try

            {

                    String cadena;

                    cadena="jdbc:postgresql://127.0.0.1:5432/postgres";

                    Class.forName("org.postgresql.Driver");

                    Connection con = DriverManager.getConnection(cadena, "usuario","contraseña");

                    return con;

            }

            catch(Exception e)

            {

                   System.out.println(e.getMessage());

            }

            return null;

    }

    public static void main(String args[])

    {

        Ejm20_JasperReport obj = new Ejm20_JasperReport();

        obj.setVisible(true);

    }

}

Debemos tener especial cuidado con los reportes creados en diferentes sistemas operativos, mas que nada en los tipos de letras usado (Tipografía), por ejemplo creas el reporte en Windows haciendo uso de Times New Roman te podría generar un error si lo tratas de abrir en Linux o viceversa, al final, eso se corrige en el archivo jrxml generado en las partes donde hace mención a la fuente.

Código Java – Internacionalización de Aplicaciones con ResourceBundle


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

Con este post aprenderemos a hacer nuestras aplicaciones en java internacionales y poder generar software en varios idiomas como queramos. Esto yo es algo que la mayoría de las aplicaciones lo vienen realizando sean de escritorio o aplicaciones web que hacen uso de la internacionalización, que no es otra cosa más que adaptar nuestro software a diferentes idiomas y regiones, todo ello sin necesidad de hacer cambios considerables en el código fuente, sino haciendo uso de ficheros de propiedades que nos serán de gran ayuda.

En Java debemos acceder a la clase ResourceBundle que deberá enlazarse con el fichero de propiedades(.properties) y de esa manera obtener el recurso a usar. Deberán existir tantos ficheros de propiedades como idiomas que soportará la aplicación, cuyo nombre del fichero deberá guardar relación con los siguientes estándares:

Para el idioma – ISO 639.
Para el país – ISO3166

La composición del nombre de identificación deberá contar con el NombreFichero_pais_IDIOMA; respetando mayúsculas y minúsculas:
LANG_en_US – Inglés/EE.UU
LANG_es_PE – Español/Perú

El fichero de propiedades deberá contener la palabra clave y el texto con el cual está relacionado. La palabra clave deberá ser la misma en todos los ficheros de cada idioma, por ejemplo:

LANG_en_US.properties
IDIOMA=Spanish

LANG_es_PE.properties
IDIOMA=Español

Al momento de construir los ficheros properties de la aplicación,algunos programadores suelen usar el nombre del componente como palabra clave, yo prefiero poner como palabra clave la ruta completa de los componentes, y cuando sea necesaria alguna propiedad, por ejemplo hago uso de this cuando me refiero el contenedor principal.
En este ejemplo, el directorio donde estarán ubicados los ficheros de propiedades guardará la siguiente organización:

Para efectos didácticos solo usaré 2 idiomas, Ingles (en_US), y español (es_PE), además del fichero que se usará por defecto identificado solo como LANG.properties. Cada uno de estos ficheros deberá contener los siguientes datos:

LANG_en_US.properties
beastieux.gui.Ejm19_Internacionalizacion.this=Configuration
beastieux.gui.Ejm19_Internacionalizacion.lbl1=Country
beastieux.gui.Ejm19_Internacionalizacion.lbl2=City
beastieux.gui.Ejm19_Internacionalizacion.lbl3=Language

LANG_es_PE.properties
beastieux.gui.Ejm19_Internacionalizacion.this=Configuración
beastieux.gui.Ejm19_Internacionalizacion.lbl1=País
beastieux.gui.Ejm19_Internacionalizacion.lbl2=Ciudad
beastieux.gui.Ejm19_Internacionalizacion.lbl3=Idioma

El siguiente procedimiento recibirá como único parámetro la ruta del fichero de propiedades ejm: beastieux.language.LANG_en_US, y seteará el ResourceBundle con los datos de dicho fichero, con el cual cambiará automáticamente al idioma definido.

...
    private void setBundles(String propertyFile)
    {
            ResourceBundle rb = ResourceBundle.getBundle(propertyFile);

            String keyBundle=this.getClass().getName();

            this.setTitle(rb.getString(keyBundle + ".this"));
            this.lbl1.setText(rb.getString(keyBundle + ".lbl1"));
            this.lbl2.setText(rb.getString(keyBundle + ".lbl2"));
            this.lbl3.setText(rb.getString(keyBundle + ".lbl3"));
    }
...

Código de Ejemplo:

package beastieux.gui;

import java.awt.GridLayout;
import java.util.ResourceBundle;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

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

    JLabel lbl1;
    JLabel lbl2;
    JLabel lbl3;
    JTextField txt1;
    JTextField txt2;
    JComboBox cmb1;

    public Ejm19_Internacionalizacion()
    {

        lbl1=new JLabel();
        txt1=new JTextField();

        lbl2=new JLabel();
        txt2=new JTextField();

        lbl3=new JLabel();

        cmb1=new JComboBox();
        cmb1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                cmb1ItemStateChanged(evt);
            }
        });

        cmb1.addItem("Inglés");
        cmb1.addItem("Español");

        this.add(lbl1);
        this.add(txt1);
        this.add(lbl2);
        this.add(txt2);
        this.add(lbl3);
        this.add(cmb1);

        this.setLayout(new GridLayout(3,2));
        this.setSize(400, 100);

        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

    private void cmb1ItemStateChanged(java.awt.event.ItemEvent evt) {

        switch(this.cmb1.getSelectedIndex())
        {
            case 0:setBundles("beastieux.language.LANG_en_US"); break;
            case 1:setBundles("beastieux.language.LANG_es_PE"); break;
            default:setBundles("beastieux.language.LANG");
        }
    }

    private void setBundles(String propertyFile)
    {
            ResourceBundle rb = ResourceBundle.getBundle(propertyFile);

            String keyBundle=this.getClass().getName();

            this.setTitle(rb.getString(keyBundle + ".this"));
            this.lbl1.setText(rb.getString(keyBundle + ".lbl1"));
            this.lbl2.setText(rb.getString(keyBundle + ".lbl2"));
            this.lbl3.setText(rb.getString(keyBundle + ".lbl3"));

    }

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

}

Finalmente, cabe mencionar que los IDE’s de desarrollo modernos nos permiten realizar esta tarea fácilmente como es el caso de NetBeans o Eclipse. El procedimiento en Netbeans seria ir al menu Tools –> Internationalization, y elegir la modalidad, el más sencillo es con Internationalization Wizard.

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";

Código Java – Conexión a Base de Datos MySQL


Este es el Ejemplo #12.2 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 MySQL, para el cual es necesario contar con la respectiva librería como la que se muestra a continuación:

MySQL JDBC Driver - mysql-conector-java-5.1.3-bin.jar

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

package beastieux.gui;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.sql.rowset.CachedRowSet;
import com.sun.rowset.CachedRowSetImpl;
/**
 *
 * @author beastieux
 */
public class Ejm12_2_ConectarMySQL {

    public CachedRowSet Function(String sql)
    {

            try
            {
                    Class.forName("org.gjt.mm.mysql.Driver");

                    String url = "jdbc:mysql://127.0.0.1:3306/mysql";
                    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);

                    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.gjt.mm.mysql.Driver");

                    String url = "jdbc:mysql://127.0.0.1:3306/mysql";
                    Connection con = DriverManager.getConnection(url, "usuario","contraseña");
                    Statement s = con.createStatement();

                    s.execute(sql);

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

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

Código Java – Conexión a Base de Datos PostgreSQL


Este es el Ejemplo #12.1 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 PostgreSQL 8.3, para el cual es necesario contar con la respectiva librería como la que se muestra a continuación:

postgresql-8.3-603.jdbc3.jar

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


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_1_ConectarPostgreSQL {

    public CachedRowSet Function(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);

                    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.postgresql.Driver");

                    String url = "jdbc:postgresql://127.0.0.1:5432/postgres";
                    Connection con = DriverManager.getConnection(url, "usuario","contraseña");
                    Statement s = con.createStatement();

                    s.execute(sql);

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

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

Programación Gráfica en Java


Desde hace algunos años se ha estado compartiendo por medio de este blog muchos códigos sencillos escritos en java, específicamente algoritmos y ejemplos clásicos para iniciarse en el mundo de la programación. La idea ahora es compartirles los conocimientos básicos y a la vez esenciales para dar apertura a la programación gráfica.

Seguiré con el esquema de siempre, pues no se tratará de enseñar a programar, que para eso existen muchísimos otros sitios, páginas, web, foros, etc; lo que siempre he pretendido es brindar los métodos, técnicas, herramientas, referencias, etc; para que su labor en la programación sea menos trunca como suele suceder al momento de iniciarse, claro está que serán bienvenidas las preguntas, opiniones y críticas, como se ha venido haciendo todo este tiempo.

La IDE de desarrollo que uso es NetBeans; a la fecha de publicación de este post se encuentra en la versión estable 6.9.1. El Sistema Operativo sobre el cual trabajo es Debian Linux, aunque eso no sea de mucha importancia ahora, pues NetBeans como Java son multiplataforma, por lo tanto funciona en cualquier SO. Ustedes pueden elegir la IDE de desarrollo y el Sistema operativo que prefieran, eso si, algunos post referentes a configuraciones del entorno de desarrollo estarán basados en NetBeans y Linux.

Éste post, estará en constante modificación de acuerdo a las entradas que se realicen sobre el tema: “Programación Gráfica en Java”, en los cuales, como ya se anticipó, se brindará los conocimientos necesario para empezar con un proyecto relativamente serio.

  1. Código Java – Copiar Ficheros
  2. Código Java – Llenar JTable
  3. Código Java – Ocultar Columnas de un JTable
  4. Código Java – Desabilitar Edición de Celdas de JTable
  5. Código Java – Evento MouseClicked en JTable
  6. Código Java – For Each / Instance Of
  7. Código Java – Evento de Cambio de Texto en JTextField
  8. Código Java – Centrar un JFrame en Pantalla
  9. Código Java – Función de Encriptación mediante MD5
  10. Código Java – Realizar Búsquedas en un Array
  11. Código Java – Convertir un String a Date (Fecha)
  12. Código Java – Establecer Conexión a Base de Datos con JDBC
  13. Código Java – Llenar un JTable desde una consulta a Base de Datos
  14. Código Java – Procedimiento para llenar un JTable desde un CachedRowSet
  15. Código Java – Función para Convertir un ResultSet a Array
  16. Código Java – Agregar un Componente CheckBoxList al Proyecto
  17. Código Java – Agregar un Componente JCalendar al Proyecto
  18. Código Java – Cambiar la Apariencia de la Interfaz Gráfica con LookAndFeel
  19. Código Java – Internacionalización de Aplicaciones con ResourceBundle
  20. Código Java – Abrir Reportes Creados con JasperReports
  21. Código Java – Redimensionar Matrices sin Borrar Registros con Redim Preserve
  22. Código Java – Autoajustar Imágenes en un Contenedor
  23. Código Java – Modificar Ficheros de Propiedades en Tiempo de Ejecución

PostgreSQL: Sentencias XML


Este es el Post #17 del Topic: Guía Práctica de PostgreSQL

SUGERENCIA:
Si has utilizado la base de datos dbadmision en ejercicios previos es mejor volver a crearla.
Descargar Script: DBAdmision.sql

En este post me dedicaré a ejemplificar el uso del tipo de dato XML, el uso de las funciones XML y la exportación de consultas hacia XML con PostgreSQL.
La tecnología XML nos ha facilitado constantemente en lograr compatibilidad entre diversos formatos y permitir compartirlos entre distintas aplicaciones y sin duda en bases de datos su funcionalidad debería ser también muy aprovechada.

El esquema que habrá que respetar en el entorno de bases de datos, y en el caso específico de postgres es el siguiente:

Leer más de esta entrada

PostgreSQL: Automatización de Backups


Este es el Post #16 del Topic: Guía Práctica de PostgreSQL

SUGERENCIA:
Si has utilizado la base de datos dbadmision en ejercicios previos es mejor volver a crearla.
Descargar Script: DBAdmision.sql

El proceso de creación de backups en postgres se realiza por medio de pg_dump, y la automatización para su ejecución se puede lograr por medio de herramientas como las que se incluye en PGADMIN haciendo uso de los jobs, steps y schedules o mediante el sistema operativo, como veremos en este ejemplo.

Leer más de esta entrada

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 533 seguidores

%d personas les gusta esto: