Home / Programmazione / Java / Avviare una JProgressBar da JButton
Mattepuffo

Avviare una JProgressBar da JButton

Avviare una JProgressBar da JButton

JProgressBar è il componente usato per mostrare un una barra l'avanzamento di una determinata operazione.

A mio modo di vedere non sono affatto facili da usare, anche perchè per richiedono anche l'uso di un oggetto Thread.

Vediamo un semplice esempio di JPB avviata da un JButton.

Se usate un gui-builder aggiungete i due componenti alla finestra.

Poi create un evento actionPerformed al bottone:

       button.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Thread t = new SetProgressBar(pBar);
                 t.start();
            }
        });

Notate l'oggetto Thread e la nostra classe SetProgressBar.

A questo punto create la classe SetProgressBar, che deve estendere Thread.

 

Questa è la classe che si occuapa di tutto; come vedete il costruttore richiede un argomento, la nostra JPB:

import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

public class SetProgressBar extends Thread {

    private final int DELAY = 100;
    private JProgressBar progressBar;

    public SetProgressBar(JProgressBar bar) {
        progressBar = bar;
    }

    @Override
    public void run() {
        int minimum = progressBar.getMinimum();
        int maximum = progressBar.getMaximum();
        Runnable runner = new Runnable() {
            @Override
            public void run() {
                int value = progressBar.getValue();
                progressBar.setValue(value + 1);
            }
        };
        for (int i = minimum; i < maximum; i++) {
            try {
                SwingUtilities.invokeLater(runner);
                Thread.sleep(DELAY);
            } catch (InterruptedException ex) {
                JOptionPane.showMessageDialog(null, ex.getMessage());
            }
        }
    }
}

Nel primo run() facciamo c'è il ciclo for che serve per conteggiare il valore della JPB.

Con l'oggetto Runnable invece riempiamo, nel suo metodo run(), la JPB con i valori passati dal for.