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:
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::