[RESOLVIDO]Progressbar

4 respostas
cpsilva

Boa tarde galera, estou com um problema para criar uma simples barra de progressao, naveguei dentre alguns tópicos e achei muito complexo(completo), na verdade não tenho muita experiência em GUI. Bom mas lá vai…

Eu só queria “ver” a progressão, no caso do meu aplicativo ele esta copiando uma série de arquivos e a cada cópia ele sobe um pouco a barra, o problema é que não consigo ver essa progressão, ele começa com 0 e so muda no final com 100%.

Segue um modelo do código, não postei tudo, acredito que só isso já deixa claro.

public void aumentarBarra(int x) {
		// já esta declarada como global a progressBar
		int alvo = progressBar.getValue();
		alvo += x;
		for (int i = progressBar.getValue(); i <= alvo; i++) {
			progressBar.setValue(i);			
			try {
		//ja tentei diversos valores, ele ate demorar mais, so que nao exibe a progresssao.
				Thread.sleep(1);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

Desde já agradeço o tempo usado para este post.

4 Respostas

E

Acho que já postei isto aqui;

package guj;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

class Atualizador implements Callable<Void> {
    public Atualizador(JProgressBar prb) {
        this.prb = prb;
    }

    @Override
    public Void call() throws Exception {
        while (true) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    prb.setValue(val++);
                }
            });
            if (val >= 100)
                val = 0;
            Thread.sleep(100);
        }
    }

    private JProgressBar prb;
    private int val = 0;
}

public class ExemploCallable extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JPanel pnlBotoes = null;
    private JButton btnIniciar = null;
    private JButton btnParar = null;
    private JProgressBar prbProgresso = null;

    private ExecutorService executor;
    private FutureTask<Void> future;

    private JPanel getPnlBotoes() {
        if (pnlBotoes == null) {
            pnlBotoes = new JPanel();
            pnlBotoes.setLayout(new FlowLayout());
            pnlBotoes.add(getBtnIniciar(), null);
            pnlBotoes.add(getBtnParar(), null);
        }
        return pnlBotoes;
    }

    private JButton getBtnIniciar() {
        if (btnIniciar == null) {
            btnIniciar = new JButton();
            btnIniciar.setText("Iniciar!");
            btnIniciar.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    btnIniciar.setEnabled(false);
                    future = new FutureTask<Void>(new Atualizador(prbProgresso));
                    executor.execute(future);
                    btnParar.setEnabled(true);
                }
            });
        }
        return btnIniciar;
    }

    private JButton getBtnParar() {
        if (btnParar == null) {
            btnParar = new JButton();
            btnParar.setText("Parar!");
            btnParar.setEnabled(false);
            btnParar.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    btnParar.setEnabled(false);
                    future.cancel(true);
                    btnIniciar.setEnabled(true);
                }
            });
        }
        return btnParar;
    }

    private JProgressBar getPrbProgresso() {
        if (prbProgresso == null) {
            prbProgresso = new JProgressBar();
            prbProgresso.setStringPainted(true);
        }
        return prbProgresso;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ExemploCallable thisClass = new ExemploCallable();
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                thisClass.setVisible(true);
            }
        });
    }

    public ExemploCallable() {
        super();
        initialize();
        executor = Executors.newCachedThreadPool();
    }

    private void initialize() {
        this.setSize(300, 111);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(getJContentPane());
        this.setTitle("Exemplo Callable");
    }

    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(getPnlBotoes(), BorderLayout.SOUTH);
            jContentPane.add(getPrbProgresso(), BorderLayout.CENTER);
        }
        return jContentPane;
    }

}
cpsilva

É eu tinha visto alguns assim, talvez tenha passado pelo seu, mas não pensei que precisava de tanto código.

Obrigadão!
Vou dar mais atenção para essa parte do meu código.

S

Tu tbm pod implementar a Runnable e usar o metodo run().

cpsilva

Para finalizar…

acabei ficando com este metodo que foi postado aqui no GUJ tb.

int x = 5000;
for(int i=0; i<x; i++)
 {
       progress = (100*(i+1))/x;
       jProgressBar1.setValue(progress);
      // a Manha ta aki logo abaixo.
      jProgressBar1.getUI().update(jProgressBar1.getGraphics(), jProgressBar1);
      Thread.sleep(250);
}
Criado 26 de novembro de 2010
Ultima resposta 26 de nov. de 2010
Respostas 4
Participantes 3