viernes, 27 de abril de 2012

Limpiar los componente contenidos en un JPanel

En el mundo Java el estandar para las interfaces de usario en aplicaciones de escritorio es Swing y me he topado muchas veces con la necesidad de limpiar un formulario despues que un usuario realizo algua accion, si el panel contiene 10 componentes no hay tanto problema pero imaginen un panel con 50 componentes de diferente tipo (inputTexts, combos, checks, radios, etc) esto se volveria muy tedioso, para esto podemos hacer uso de una propiedad que existe desde la version 5 de Java, Reflection :

 public static void limpiarPanel(JPanel panel) {
        if (panel != null) {
            for (Component item : panel.getComponents()) {

                if (item instanceof JTextField) {
                    ((JTextField) item).setText(null);
                } else if (item instanceof JCheckBox) {
                    ((JCheckBox) item).setSelected(false);
                } else if (item instanceof JComboBox) {
                    ((JComboBox) item).setSelectedIndex(0);
                } else if (item instanceof JFormattedTextField) {
                    JFormattedTextField jftf = (JFormattedTextField) item;

                    InputVerifier verificador = jftf.getInputVerifier();
                    jftf.setInputVerifier(null);
                    jftf.setText(null);
                    jftf.setValue(null);
                    jftf.setInputVerifier(verificador);
                } else if (item instanceof JCheckBox) {
                    ((JCheckBox) item).setSelected(false);
                }
            }
        }
    }


Escribir un archivo a partir de una lista de String con Java

Nuevamente haciendo uso del poder del paquete java.io en especifico las clases FileWriter y PrintWriter escribiremos un archivo a partir de una lista de String:

/**    
     * @param ruta Ruta en la cual depositaremos el archivo
     * @param nombreArchivo Nombre que le daremos al archivo
     * @param registros Lista de String que se escribiran en el archivo
     */
    public static void escribirArchivo(String ruta, String nombreArchivo, List registros) {
        FileWriter fichero = null;
        PrintWriter pw = null;
        try {
            fichero = new FileWriter(ruta + nombreArchivo);
            pw = new PrintWriter(fichero);

            for (String item : registros) {
                pw.println(item);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fichero) {
                    fichero.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }


Nota: importar las clases java.io.FileWriter y  java.io.PrintWriter;

Validar si una fecha es valida con Java

En este metodo hacemos uso de la clase  SimpleDateFormat para validar que una fecha cumpla con el formato dd/MM/yyyy (dia/mes/año), esto aplicaria en los casos en donde es necesario que el usuario ingrese la fecha manualmente sin hacer uso de algun componente como jCalendar

 public static boolean isFechaValida(String fecha) {
        try {
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
            formatoFecha.setLenient(false);
            formatoFecha.parse(fecha);
        } catch (ParseException e) {
            return false;
        }
        return true;
    }

Nota: importar la clase java.text.SimpleDateFormat;

Copiar un archivo de una ruta a otra con Java

Mostrando el poder del java.nio haciendo uso de la clase FileChannel.

public static void copyFile(File archivoOrigen, File archivoDestino) {
        try {
            FileChannel in = (new FileInputStream(archivoOrigen)).getChannel();
            FileChannel out = (new FileOutputStream(archivoDestino)).getChannel();
            in.transferTo(0, archivoOrigen.length(), out);
            in.close();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Nota: importar la siguiente clase java.nio.channels.FileChannel

Listar los archivos de una carpeta recursivamente con Java

Me parece muy potente y practica las clases del paquete java.io para muestra basta un boton metodo. El siguiente metodo lista todos los archivos dentro de una carpeta usando recursividad.

 public static void listarArchivosRecursivamente(File file, String ruta) {
        File[] ficheros = file.listFiles();

        for (int i = 0; i < ficheros.length; i++) {
            if (ficheros[i].isDirectory()) {
                listarArchivosRecursivamente(ficheros[i], ficheros[i].getAbsolutePath());
            } else {
                System.out.println(ruta+"/"+ficheros[i]);
            }
        }
    }

Conocer el nombre y la IP de la PC con Java

En alguna ocasión tuve la necesidad de guardar en la BD el log de los movimientos dentro de la aplicación de los usuarios, el nombre del usuario lo obtenía desde la misma aplicación (login), pero un usuario podría entrar a la aplicación en una maquina distinta a la que tenia asignada, por lo tanto era necesario saber el nombre e IP de la maquina desde la cual estaba realizando la operación, los siguientes métodos me resolvieron el problema:

Retorna el nombre de la PC:

public static String getNombrePc() {
        try {
            InetAddress address = InetAddress.getLocalHost();
            return address.getHostName();
        } catch (Exception e) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Conocer la IP de la maquina:

  public static String getIpPc() {
        try {
            return InetAddress.getLocalHost().getHostAddress();
        } catch (Exception ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Nota: importar las clases del paquete: java.net.InetAddress;


El inicio

Este es el enésimo blog que inicio, espero ser regular y constante en mis publicaciones.