Barra de Progreso en Java

   Existen muchas formas de crear el efecto de "Cargando" en Java, lo que se conoce también como ProgessBar o Barra de Progreso. Como la idea es hacerlo lo mas simple que podamos entonces tenemos 2 opciones, o programamos en multi-hilo para que durante la carga de componentes se envien datos a ver cuales se han cargado y cuales no, o simplemente hacerlo por tiempo (simple y práctica). Ahora bien, para hacerlo necesitamos saber como funciona el componente "JProgressBar", pero a modo rápido lo que debemos tener en cuenta si queremos aplicar esto por tiempo es el límite de la barra, el progreso y el valor actual de la misma.

   De este modo, por ejemplo, supongamos que tenemos un programa que cargará esta barra por tiempo, entonces su límite es 100 (100%), progreso será la posición donde estará el límite de la barra y valor actual será el valor comprendido entre 0 y 100 (el porcentaje que lleve). Pero nos falta algo más, si vamos a hacer por tiempo entonces necesitamos un contador que, a medida que aumenta, cresca la barra con este, para ello entonces hacemos lo siguiente:
for (int i = 0; i <= 100; i++) {
   for (long j=0; j < tiempo; ++j) {
       String barra = " " + (j + i);
   }
   setProgreso("Cargando " + i, i); //Este será nuestro progreso
}
   De esta forma entonces ya tenemos la velocidad de carga de la barra, a mayor cantidad mas lento, puesto que es un contador, a medida que la variable "tiempo" aumente la barra lo hará también. Ahora debemos cargar el mensaje a la barra, de modo que muestre el texto "Cargando" a medida que se complete:
if (mensaje==null){
    mensaje = "";
    Barra.setStringPainted(false);
} else{
    Barra.setStringPainted(true);
} Barra.setString(mensaje);
   Recordando que "Barra" es la variable de "JProgressBar", ahora necesitamos algo que le diga a la barra en que posición está para que esta haga el efecto de cargando.
final int progreso = progress;
final String elMensaje = mensaje;
setProgreso(progress); //Seteo del progreso final
Barra.setValue(progreso);
setMensaje(elMensaje);
   Una vez hecho esto, debemos indicar la variable final para que todo comience desde el principio, ya que como sabrán, esto es un ciclo, entonces todo vuelve a comenzar pero a partir de la posición donde terminó el ciclo, de esta forma logramos el efecto deseado.
final int progreso = progress;
Barra.setValue(progreso);
   Ya sabiendo todo esto, entonces ya tenemos nuestra barra de progreso funcional, un ejemplo práctico de eso es el siguiente:
import javax.swing.*;
import java.awt.*;

public final class PantallaCargando extends JWindow {
    BorderLayout Layout = new BorderLayout();
    JPanel PanelInferior = new JPanel();
    FlowLayout PanelFlowLayout = new FlowLayout();
    JProgressBar Barra = new JProgressBar();

    public PantallaCargando() {
        dibujaVentana();
        setLocationRelativeTo(null);
        setProgresoMax(100);
        setVisible(true);
        velocidadDeCarga(99999);
    }

    public void dibujaVentana() {
        getContentPane().setLayout(Layout);
        PanelInferior.setLayout(PanelFlowLayout);
        PanelInferior.setBackground(Color.BLACK);
        getContentPane().add(PanelInferior, BorderLayout.SOUTH);
        PanelInferior.add(Barra, null);
        pack();
    }

    public void setProgresoMax(int maxProgress){
        Barra.setMaximum(maxProgress);
    }

    public void setProgreso(int progress) {
        final int progreso = progress;
        Barra.setValue(progreso);
    }

    public void setProgreso(String mensaje, int progress) {
        final int progreso = progress;
        final String elMensaje = mensaje;
        setProgreso(progress);
        Barra.setValue(progreso);
        setMensaje(elMensaje);
    }

    private void setMensaje(String mensaje) {
        if (mensaje==null){
            mensaje = "";
            Barra.setStringPainted(false);
        } else{
            Barra.setStringPainted(true);
        } Barra.setString(mensaje);
    }

    public void velocidadDeCarga(int tiempo) {
        for (int i = 0; i <= 100; i++) {
            for (long j=0; j < tiempo; ++j) {
                String barra = " " + (j + i);
            }
            setProgreso("Cargando " + i, i);
        }
        dispose();
    }
    
    @SuppressWarnings("ResultOfObjectAllocationIgnored")
    public static void main(String[] args) {
        new PantallaCargando();
    }
}
   Con esto ya tenemos nuestra barra de progreso "por tiempo", solo debemos tener en cuenta la velocidad de carga que la aumentamos y disminuimos en el método "velocidadDeCarga(valor_entero)".


2 Comentarios

Escribir Comentario
Anónimo
AUTOR
16 de mayo de 2012, 12:22 delete

genial!! funciona perfecto

Responder
avatar
Unknown
AUTOR
9 de octubre de 2012, 13:22 delete

Hola Carlitos.. Muy bueno esta el codigo! gracias..

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión