JPanel

Galera…eu tenho uma JProgressBar dentro de um JPanel…eu a faço trabalhar com Threads…
Ela funciona legal, carrega a procentagem filé…(porém somente na primeira vez, em quanto ela é visivel)
no final da execução eu digo que o painel que ela esta fique invisivel…
Quando eu mando que ele fique novamente visivel ele não aparece mais…

aqui esta meu codigo.


public void startProgress(){

jPanel3.setVisible(true);
        boolean saida=false;
       xxx x= new xxx();
       x.start();
        for(int i=0;i<100044;i++){
            System.out.println(i);
        }
       saida=true;
if(saida){
            try {
                x.setProgress(80);
                Thread.sleep(1000);
                x.setProgress(100);
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(telaInicial.class.getName()).log(Level.SEVERE, null, ex);
            }
jPanel3.setVisible(false);
x.setParada(true);
x=null;
}
}


private class xxx extends Thread{

int progress;
boolean condition=true;
boolean parada=false;
public void setParada(boolean b){
    parada=b;
}
public void setProgress(int i){
    condition=false;
    this.progress=i;
}
        public void run(){
                   int x = 100;
         //int progress;
for(int i=10; i<x; i++)
{
    if(parada)break;
            try {
                if(condition)
                progress = (100 * (i + 1)) / x;
                System.out.println(progress);
                jProgressBar1.setValue(progress);
                jProgressBar1.setStringPainted(true);
                
                jProgressBar1.getUI().update(jProgressBar1.getGraphics(), jProgressBar1);
                Thread.sleep(250);
            } catch (InterruptedException ex) {
                Logger.getLogger(telaInicial.class.getName()).log(Level.SEVERE, null, ex);
            }
}
System.out.println ("acabou a thread");
        }


    }


Que tosqueira é essa aqui?

jProgressBar1.getUI().update(jProgressBar1.getGraphics(), jProgressBar1);  

Outra coisa, depois de tornar algum componente sobre um panel visível, você deve chamar a função invalidate sobre esse mesmo panel.

Olá a todos…
“Para os que não sabem, a tosqueira que o nosso colega Vine se referiu é para utilização do componente JProgressBar sem utilização de Threads…no meu código ela encontra-se com Threads pois minha aplicação exige isto. Mas quem quiser ver a “tosqueira” funcionando copia e cola o código aí que dará certo!
Essa foi a melhor forma que eu já encontrei para trabalhar com JProgressBar!”
:smiley:

Vini já havia pensado no invalidate, porém tbm não deu certo…

Estude bem essa parte de concorrência em Swing, especialmente EDT e SwingWorker.
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html

O seu código está difícil de entender.

Na verdade, é porque você nunca deveria ter que chamar getUI().update, principalmente passando o Graphics dessa maneira.

Otra coisa é o nome do seus métodos, variáveis e componentes…
Renomeia bonitinha :stuck_out_tongue:
Esse tanto de “X” é chato pra entender =)

ok, mas ninguem tem uma ideia de cm faço para fazer o Panel aparecer?