miércoles, 3 de noviembre de 2010

Swingworker con animacion de cargado

Aqui vamos con un post pequeño, la idea es sencilla, ya vimos en un post anterior como usando Swingworker cargamos una tabla e implementamos un pogressbar, bueno ahora haremos algo similar, pero haremos que nuestra aplicacion tenga un mejor aspecto, por ello pondremos una animacion de carga, tal como la que se estila actualmente en las aplicaciones web.


Lo primero es instalar los componentes de Swingx, esto ya lo he explicado en este post.

Ahora construyamos nuestra GUI, en este caso en un JFrame sencillo con un boton Listar y una tabla que será la que cargará los datos, le pondremos un Progressbar y para la animacion el componente de SwingLabs denominado JXBusyLabel.

Nuestra ventana debe ser similar a la siguiente.


Explicaremos un poco el componente JXBusyLabel, este componente simplemente contiene una imagen la cual al poner en true su metodo setBusy() presenta una animacion y ademas permite mediante su metodo setText() definir algun texto que queremos que presente.

Bueno como repasando vamos a ver algunos pasos del post Uso de Swingworker.

En nuestro evento actionPerformed del boton Listar vamos agregar las siguientes lineas.
Dentro de jbtnListarActionPerformed
private void jbtnListarActionPerformed(java.awt.event.ActionEvent evt) {                                           
//iniciamos nuestra barra de progreso
        progressBar.setValue(0);
        //definimos un texto que acompaña a la animacion
        jxLoader.setText("Cargando...");
        //iniciamos la animacion
        jxLoader.setBusy(true);
        //visualizamos la animacion
        jxLoader.setVisible(true);

Si recuerdan para cargar los datos de una tabla aprovechando el metodo asincrono de swingworker utilizamos su metodo doInBackground() y el metodo done() nos permite definir que se debe hacer cuando culminó la tarea.

Pues dentro del metodo done() agregaremos el siguiente codigo el cual lo unico que hace es detener la animacion y ocultar el componente.
Dentro de jbtnListarActionPerformed
@Override
            protected void done() {
                setProgress(100);
                jtblProductos.setModel(new ArraylistTableModel(datos, cols));
                jxLoader.setBusy(false);
                jxLoader.setVisible(false);
            }

1 comentario:

 
Powered by Blogger