Como fazer uma progress bar simples

Quero fazer uma progress bar simples que quando eu clique em um botao ela ative e vá do 1% até o 100% em cerca de 3 segundos ± só de enfeite mesmo,
Podem me ajudar?
Obrigado!

Um exemplo mais que ridículo:

public class Frame extends JFrame {

    public static void main(String[] args) {
        new Frame();
    }

    public Frame() {
        super("Exemplo ridiculo!");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(new Dimension(230, 100));
        pack();
        setLocationRelativeTo(null);
        init();
        setVisible(true);
    }

    private void init() {

        JPanel p = new JPanel();
        final JButton b = new JButton("Botao");
        final JProgressBar pr = new JProgressBar();
        pr.setStringPainted(true);
        pr.setValue(0);
        pr.setSize(new Dimension(100, 23));
        p.add(pr);
        p.add(b);
        add(p);

        final SwingWorker w = new SwingWorker() {

            @Override
            protected Object doInBackground() throws Exception {
                for (int i = 1; i <= 100; i++) {
                    try {
                        pr.setValue(i);
                        pr.setString(i + "%");
                        Thread.sleep(20);
                    } catch (InterruptedException ex) {
                        ex.printStackTrace();
                    }
                }
                return 0;
            }
        };

        b.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                w.execute();
            }
        });
    }
}

De propósito não fiz nada esquisito neste programa. Não usei MigLayout nem usei java.util.concurrent, só coisas bem simples.

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.border.EmptyBorder;

public class ExemploJProgressBar3Segundos extends JFrame {

    private JPanel contentPane;
    private JProgressBar progressBar;
    private JPanel panel;
    private JButton btnIniciar;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploJProgressBar3Segundos frame = new ExemploJProgressBar3Segundos();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploJProgressBar3Segundos() {
        setTitle("Exemplo Progress Bar Temporizada");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        contentPane.add(getProgressBar(), BorderLayout.NORTH);
        contentPane.add(getPanel(), BorderLayout.SOUTH);
    }

    private JProgressBar getProgressBar() {
        if (progressBar == null) {
            progressBar = new JProgressBar();
            progressBar.setStringPainted(true);
        }
        return progressBar;
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.add(getBtnIniciar());
        }
        return panel;
    }

    private JButton getBtnIniciar() {
        if (btnIniciar == null) {
            btnIniciar = new JButton("Iniciar!");
            btnIniciar.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    btnIniciar.setEnabled(false);
                    porcentagem = 0;
                    timer = new Timer(30, new ActionListener() {
                        @Override
                        public void actionPerformed(ActionEvent e) {
                            porcentagem++;
                            progressBar.setValue(porcentagem);
                            if (porcentagem >= 100) {
                                timer.stop();
                                btnIniciar.setEnabled(true);
                            }
                        }
                    });
                    timer.start();
                }
            });
        }
        return btnIniciar;
    }

    private Timer timer;
    private int porcentagem;
}

Pode me ajudar ou fazer algo mais simples? não consigo implementar isso, sou iniciante, eu uso Netbeans só pra constar

EDIT* Vou tentar implementar o do segundo que postou , obrigado mesmo! qualquer coisa eu volto

Noite,

amigo tenho um simples, porem não esta 100% mas da uma olhada, talvez vc consiga fazer com que ele fique 100%

to estudando meio que na tora… copiando e estudando codigos… e tals… o problema da barra ai é que pula de 0% pra 100% direto… gostaria q ele interagisse com o metodo xCarregando(); la tu vai entender :wink:

segue o codigo que copiei tbm pode ajudar…

creditos : http://www.inf.ufsc.br/~bosco/ensino/ine5625/exemplos/JDBC/TudoSobreJDBC/Apendice%20C/exProgressBar.java

[code]import java.awt.;
import javax.swing.
;
import java.awt.event.*;

public class exProgressBar extends JFrame {

// Define a Barra de Progresso
JProgressBar prbConta = new JProgressBar();
// Define uma Thread para simular rodando
Thread roda;

public exProgressBar() {
this.setSize(264, 150);
this.setTitle(“Exemplo do JProgressBar”);
// Define o valor inicial da Barra
prbConta.setMinimum(0);
// Define o valor final da Barra de Progresso
prbConta.setMaximum(50);
// Mostra o valor na barra
prbConta.setStringPainted(true);
// Insere a barra
this.getContentPane().add(prbConta, BorderLayout.SOUTH);
// Cria um botão para iniciar o processo
JButton butInicia = new JButton(“Inicia”);
// Ao acionar o botão
butInicia.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Inicia o valor da Barra
prbConta.setValue(prbConta.getMinimum());
// Inicia o processo
if (roda == null) {
roda = new roda();
roda.start();
}
}});
// Insere o botão na Janela
this.getContentPane().add(butInicia, BorderLayout.NORTH);

this.addWindowListener(
  new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
      System.exit(0);
  }
});

}

class roda extends Thread {
public void run() {
// Cria um objeto para atualizar a Barra
Runnable runner = new Runnable() {
public void run() {
// Obtém o resultado atual da Barra
int valor = prbConta.getValue();
// Atualiza a Barra
prbConta.setValue(valor+1);
}
};
for (int i = 0; i < 50; i++) {
// ---------------------------------
// Faça aqui o processo a realizar
// ---------------------------------

    // Atualiza a Barra de Progresso
    try {
      SwingUtilities.invokeAndWait(runner); 
    } catch (java.lang.reflect.InvocationTargetException e) { 
      break; 
    } catch (InterruptedException e) {
    }
  }
 roda = null; 
}     

}

public static void main(String args[]) {
exProgressBar nova = new exProgressBar();
nova.show();
}
}[/code]

1 curtida

Obrigada tibum, me ajudou muito!