Crear barra de progreso de Java usando la clase JProgressBar

Mehvish Ashiq 12 octubre 2023
Crear barra de progreso de Java usando la clase JProgressBar

Este tutorial tiene como objetivo comprender cómo podemos crear una barra de progreso Java utilizando la clase JProgressBar en la aplicación SWING. También aprenderemos cómo mostrar números y texto teniendo en cuenta el nivel al que se llena la barra de progreso.

Use la clase JProgressBar para crear la barra de progreso de Java

Supongamos que cargamos/descargamos un archivo y la operación se realiza en segundo plano sin notificarnos. Podemos sentarnos durante horas y dejar que la máquina realice la carga/descarga.

Aquí es donde la barra de progreso es útil e indica cuánto trabajo se ha realizado. Comience con la barra de progreso horizontal usando la clase JProgressBar, un widget que muestra una barra de progreso para tareas que consumen mucho tiempo.

Código de ejemplo:

import java.awt.*;
import javax.swing.*;

public class jProgressBarDemoOne {
  public static void main(String[] args) {
    final int MAXIMUM = 100;
    final JFrame jFrame = new JFrame("JProgress Demo One");

    // create horizontal progress bar
    final JProgressBar progressBar = new JProgressBar();
    progressBar.setMinimum(0);
    progressBar.setMaximum(MAXIMUM);
    progressBar.setStringPainted(true);

    // add progress bar to the content pane layer
    jFrame.setLayout(new FlowLayout());
    jFrame.getContentPane().add(progressBar);
    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.setSize(300, 200);
    jFrame.setVisible(true);

    // update progressbar staring from 0 to 100
    for (int i = 0; i <= MAXIMUM; i++) {
      final int currentNumber = i;
      try {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            progressBar.setValue(currentNumber);
          }
        });
        java.lang.Thread.sleep(100);
      } catch (InterruptedException event) {
        JOptionPane.showMessageDialog(jFrame, event.getMessage());
      }
    }
  }
}

Producción:

crear la barra de progreso de Java usando la clase jprogressbar - números en la barra de progreso, primera parte

crear la barra de progreso de Java usando la clase jprogressbar - números en la barra de progreso, segunda parte

Dentro de la función main, asignamos 100 a la variable MAXIMUM, que denota la finalización de la tarea si este número está visible en la barra de progreso.

El constructor JFrame se crea para mostrar una ventana en la pantalla de la computadora, y es una ventana base para otros componentes en los que se basan, por ejemplo, paneles, botones, barra de menú, etc.

A continuación, creamos una construcción de la clase JProgressBar para crear una barra de progreso horizontal. Los métodos setMinimum() y setMaximum() toman un número entero como argumento para establecer el valor mínimo y máximo almacenado en el modelo de datos de la barra de progreso.

El método setStringPainted() toma un valor booleano para decidir si la barra de progreso debe representar una cadena de progreso o no. La cadena se representa si es true; de otra forma no.

El método setLayout() nos permite configurar el diseño del contenedor como un FlowLayout para este tutorial. El FlowLayout agrega los elementos en un flujo secuencial (un elemento tras otro en una línea) en el contenedor y mueve el elemento a la siguiente línea si no cabe en la línea actual.

Por ahora, creamos una ventana, configuramos el diseño del contenedor y creamos una barra horizontal con un valor mínimo y máximo, y es hora de agregar la barra de progreso al contenedor.

Estamos utilizando el método getContentPane(), que se utiliza para acceder a la capa del panel de contenido y permitirnos agregarle el objeto.

Cuando el usuario hace clic en el botón de cruz (X), se activa el evento de cerrar ventana, lo que permite que la función setDefaultCloseOperation() cierre la aplicación. El setSize() se utiliza para establecer el width y la height de la ventana, mientras que setvisible() muestra la ventana a los usuarios si se vuelve true.

Finalmente, los bucles for actualizan la barra de progreso que comienza desde 0% y va hasta 100%. El siguiente código de ejemplo mostrará texto en la barra de progreso en lugar de números.

Código de ejemplo:

import java.awt.*;
import javax.swing.*;

public class jProgressBarDemoTwo {
  static int MAXIMUM = 100;
  static JFrame jFrame = new JFrame("JProgress Demo");
  // create horizontal progress bar
  static JProgressBar progressBar = new JProgressBar();

  public static void main(String[] args) {
    progressBar.setMinimum(0);
    progressBar.setMaximum(MAXIMUM);
    progressBar.setStringPainted(true);

    // add progress bar to the content pane layer
    jFrame.setLayout(new FlowLayout());
    jFrame.getContentPane().add(progressBar);

    jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jFrame.setSize(300, 200);
    jFrame.setVisible(true);

    // update progressbar by displaying text on it
    int currentNumber = 0;
    try {
      while (currentNumber <= MAXIMUM) {
        // set text considering the level to which the bar is colored/filled
        if (currentNumber > 30 && currentNumber < 70)
          progressBar.setString("wait for sometime");
        else if (currentNumber > 70)
          progressBar.setString("almost finished loading");
        else
          progressBar.setString("loading started");

        // color/fill the menu bar
        progressBar.setValue(currentNumber + 10);
        // delay thread
        Thread.sleep(3000);
        currentNumber += 20;
      }
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}

Producción::

crear la barra de progreso de Java usando la clase jprogressbar - texto en la barra de progreso, primera parte

crear la barra de progreso de Java usando la clase jprogressbar - texto en la barra de progreso, segunda parte

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - Java GUI