Mover barra do JProgressBar

4 respostas
D

olá galera blz

alguem sabe como eu faço pra mover o barra de carregamento de um JProgressBar , conforme o demorar de um processo que esta rodando em uma Thread separada??

será que isso é possível???

ficarei grato a quem puder me ajudar

4 Respostas

Leozin

Olá Diego tudo bem?

Bom, antes de tudo vamos ver algumas regras básicas sobre qualquer ProgressBar. Essa regra é aplicada tanto em .NET quanto em Swing/SWT, não sei quanto na web, pois nunca usei ProgressBar

todo progressBar possui os valores máximos e mínimos. Geralmente, os padrões são 0 e 100, mas você pode arrumar eles

Todo ProgressBar vai “pintando”, “preenchendo” de acordo com o “value” dele. Digamos, um ProgressBar está setado com valores 0 e 100 respectivamente para mínimo e máximo. Se o value estiver setado para 50, a barra vai ficar pintada até a metade.

Uma das formas para tu fazer ela andar é somente setando o “value”. Agora se você usa threads ou não, é de sua escolha. Se essa barra é um processo crítico (digamos, existe uma tela que, se um processo não terminar, não deve andar) daí não há necessidade de você utilizar thread, pois o programa deve focar no processo e na “rolagem” da barrinha. Agora, digamos que no seu programa faça downloads automáticos de um update e voc6e quer fazer que a barrinha se mexa quando o usuário estiver fazendo outra tarefa, daí há necessidade de uma Thread.

Alguns métodos úteis:

setMinimum( int ) //ajusta o valor mínimo, padrão 0
setMaximum( int ) //ajusta o valor máximo, padrão 100
setValue( int ) // ajusta "a posição", o "preenchimento" do JProgressBar

Espero ter ajudado :smiley:

D

blz Leozin!!

então cara o meu problema é o seguinte , eu quero que a barrinha do JProgressBar c mova conforme o processamento de um backup , e que quando ele acabar a barrinha esteja totalmente completa, e para isso estou sim usando Threads , mais é o seguinte eu estou usando para fazer o backup esse código

//comando que executa o backup do banco postgres
        ProcessBuilder builder = new ProcessBuilder("C:\\Arquivos de programas\\PostgreSQL\\8.1\\bin\\pg_dump.exe",
                "-i", "-h" ,endIPBanco,"-p", "5432","-U", usuario, "-F","c","-b","-v","-f", caminhoDestino, baseDados);
        
        //inicia o comando
        final Process processo = builder.start();
        
        //apos iniciado o comando crai-se duas Threads que ficarão rodando pararlelamente com a Thread do backup
        //criada automaticamente acima , a Primeira Thread , é pra saber quando tremina a execução do backup
        //e a segunda é pra saber c ouve erro no mesmo
        
        //primeira Thread
        new Thread( new Runnable() {
            public void run() {
                Scanner sc = new Scanner(processo.getInputStream());
                while ( sc.hasNext() ) {
                    sc.next();
                }
            }
        } ).start();
        
        //segunda Thread
        new Thread( new Runnable() {
            public void run() {
                Scanner sc = new Scanner(processo.getErrorStream());
                while ( sc.hasNext() ) {
                   sc.next();
                }
            }
        } ).start();
        
        try{
            //fica aguardando pelo processo do backup
            processo.waitFor();
            processo.getErrorStream().close();
            processo.getOutputStream().close();
        }catch(Exception ex){
            
        }

então ele só sai desse método quando eu terminar o processo entendeu??

e queria saber c tem como eu encaixar o setValue() do JProgressBar , pra que ele acompanhe o tempo de demora do backup movendo-se a barrinha...

não sei c vc entendeu, e mais ou menos isso..
será que vc tem alguma idéia pra me ajudar???

Leozin

Caro diego

Infelizmente isso é algo mais ligado a lógica e nem tanto ao JProgressBar, ou seja, você poderia fazer uns cálculos, do tipo:

Quantos arquivos que você irá fazer backup?
Vamos imaginar que, são, 25 arquivos que tu irá fazer backup

Vamos configurar o JProgressBar para que o mesmo seja “dinâmico”

progressBar1.setMaximum( 25 );

Então, para cada arquivo que passar, vamos aumentar o value do progressBar

int valorAtual = progressBar1.getValue();
progressBar1.setValue( ++valorAtual );

Essa parte do código você botaria num for, foreach sei lá

List meusArquivos = criadorDeBackups.getMeusArquivos();

jProgressBar1.setMaximum( meusArquivos.size() );
for( int i = 0; i < meusArquivos.size(); i++ ) {
      efetuarBackupDoArquivo( meusArquios.get( i ) );
      progressBar1.setValue( i );
}

Tu poderia alterar o valor do progressBar dentro de alguns daqueles for que lê o stream do console :stuck_out_tongue: Mas daí você teria que pensar como, pois, como citei, isso é algo mais “lógico”, não tem muito stress com o JProgressBar

Espero ter ajudado

D

hum sei , bom mais então vou tentar algo aqiu pra fazer isso …
muito obrigado pela dica , valew mesmo

Criado 23 de outubro de 2006
Ultima resposta 23 de out. de 2006
Respostas 4
Participantes 2