Como fazer uma progress bar simples

6 respostas
Maicon_Henrrique

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!

6 Respostas

F

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();
            }
        });
    }
}
E

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;
}
Maicon_Henrrique

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

T

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:

T

segue o codigo que copiei tbm pode ajudar...

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

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();
  }
}
M

Obrigada tibum, me ajudou muito!

Criado 4 de outubro de 2012
Ultima resposta 31 de mar. de 2014
Respostas 6
Participantes 5