Problema utilizando JProgressBar

10 respostas
Luiz_Henrique_Coura

utilizo UNIX(Compaq Tru64 V5.1A) com JAVA SDK1.4.2 e estou tentando utilizar JProgressBar em uma aplicação de animação de imagens que fiz.
a idéia é qd o usuário for carregar as images para animação, seja mostrado para ele uma barra de carregamento (JProgressBar) informando que a tarefa está sendo processada.

criei uma instancia de JProgressBar utilizando um construtor sem parametros e logo em seguida inicializo os valores mínimos e máximos com:

setMinimum( int min )

setMaximum( int max )

então a cada carregamento, cada passo da tarefa eu faço uma chamada ao método:

setValue( int value )

o problema é que a barra nao se altera. para vcs terem uma idéia, eu fiz um teste com 20 imagens, em média demora uns 2 a 3 segundos para carregar essas imagens. o estranho é que qd termina a tarefa, ele preenche a JProgressBar… chega a 100%, ou seja, sai do 0% e vai direto para 100%.

fiz um teste imprimindo o valor atual da JProgressBar, utilizando o método:
getValue()
e o mais estranho é que esse valor está sendo alterado progressivamente, porém a barra fica estática, não muda. muda somente qd termina a tarefa de carregar as imagens na memória, saindo do 0% direto para 100%.

acho que devo estar fazendo alguma coisa errada.

alguém pode me ajudar?

valews!!
[]´s

10 Respostas

P

talvez se você usasse um repaint() no teu frame… tenta aí

Y
JProgressBar pg_progresso = new javax.swing.JProgressBar();
Rectangle progressRect = pg_progresso.getBounds();
progressRect.x = 0;
progressRect.y = 0;
pg_progresso.setValue(0);
pg_progresso.setMinimum(0);
pg_progresso.setMaximum(100);
for(int i=0 ; i < 100 ; i++){
    pg_progresso.setValue(gs_controle_thread);
    pg_progresso.paintImmediately( progressRect );
    sleep(200);
}
Y

Tente fazer algo assim

qq coisa

[]'s[/quote]

Y

Desculpa corrigindo o fonte

JProgressBar pg_progresso = new JProgressBar(); 
Rectangle progressRect = pg_progresso.getBounds(); 
progressRect.x = 0; 
progressRect.y = 0; 
pg_progresso.setValue(0); 
pg_progresso.setMinimum(0); 
pg_progresso.setMaximum(100); 
for(int i=0 ; i < 100 ; i++){ 
    pg_progresso.setValue(i); 
    pg_progresso.paintImmediately( progressRect ); 
}

Agora sim :smiley:

[]'s

Luiz_Henrique_Coura

Ping valew pela idéia, eu já tinha tentado isso, mas tb não tinha funcionado.

mas yuusuke_urameshi2, a sua idéia funcionou perfeitamente.
ficou bem legal!!

valew pela dica pessoal!!

ateh+
[]´s

Luiz_Henrique_Coura

mas porque não funcionou normalmente, apenas chamando o método setValue( int value ) de JProgressBar?

bLaCkWiZaRd

Pois ele seta o valor novo, mas isso não faz o JProgressBar se repintar naquele momento, qnd vc da o paintImmediately( progressRect );
ele pinta na mesma hora…
axu que é isso, espero não ter falado nenhuma besteira =P

Luiz_Henrique_Coura

é que eu fiz um teste qd eu estava testando o uso de JProgressBar e não utilizei o paintImmediately( Rectangle rec ), apenas utilizei o setValue( int value ) e funcionou normalmente.

por isso fiquei sem saber o que fazer… não conhecia esse método paintImmediately().

realmente, a experiência conta bastante nessas horas.

valews!!

bLaCkWiZaRd

Sem Problemas, tem muita coisa para saber tudo, o jeito é ir aprendendo com o tempo, as APIs e com a ajuda do pessoal aqui do forum, que é nota 10…

Precisando é só postar :twisted:

V

“Luiz Henrique Coura”:
não conhecia esse método paintImmediately().

Por isso nunca deixe de visitar a API…

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JProgressBar.html

[]´s

Criado 20 de maio de 2004
Ultima resposta 20 de mai. de 2004
Respostas 10
Participantes 5