JPanel

6 respostas
igor_jua

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");
        }


    }

6 Respostas

ViniGodoy

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.

igor_jua

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…

fabiofalci

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.

ViniGodoy

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

pedroroxd

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

igor_jua

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

Criado 28 de outubro de 2009
Ultima resposta 30 de out. de 2009
Respostas 6
Participantes 4