Estou concluindo um projeto e estou querendo colocar um jProgressBar “Barra de progressão” na inicialização do programa, para carregar conforme meus JFrames são carregados.
É a primeira vez que estou trabalhando com jProgressBar, já fiz várias buscar na rede, porém, só encontrei formas de definir um tempo para o carregamento da barra, mas nada de como acompanhar a criação dos JFrames para que eu possa ter um jProgressBar “real” que é o objetivo, mostrar visualmente a inicialização do programa.
Amigo ProgressBar é um assunto meio chato de pegar a idéia… Mas vou tentar explicar…
Geralmente quando tentamos atualizar o progresso dentro do nosso programa ele fará isso por blocos então quando:
int maximo = 100;
int cont = 1;
while (cont < maximo){
progressBar.setValue(cont);
cont++;
}
seu progressBar só vai atualizar quando o bloco while acabar. Afinal seu programa não pode fazer duas coisas ao mesmo tempo (até então). E para resolver você terá que criar uma Thread (que é exatamente um código que executa ao mesmo tempo do resto do seu programa).Vou te dar uma idéia do que fazer, adapte para seu caso:
JProgressBar progressBar = new JProgressBar();
progressBar.setStringPainted(true);
progressBar.setValue(0);
progressBar.setSize(new Dimension(100, 23));
SwingWorker w = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
for (int i = 1; i <= 100; i++) {
try {
progressBar.setValue(i);
progressBar.setString(i + "%");
Thread.sleep(20);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
return 0;
};
w.execute();
e lembre-se que depois do seu w.execute(); seu programa não vai parar, afinal o SwingWorker é um trabalho paralelo ao seu programa.
@Satangozo
Amigo até ai eu entendi, mas no exemplo que você mostrou acima, minha barra vai carregar de acordo com a variavel i, e não é exatamente isso que eu quero.
Mas o que eu quero é que ela carregue de acordo com o “carregamento inicial / criação de frames”.
Então… A variável “i” é um contador.
Suponha que você tenha que abrir 3 telas
int cont = 1;
//codigo que abre a tela 1
progressBar.setValue((cont/3)*100);
cont++;
//codigo que abre a tela 2
progressBar.setValue((cont/3)*100);
cont++;
//codigo que abre a tela 3
progressBar.setValue((cont/3)*100);
cont++;
Você tem uma classe principal que é chamada quando seu programa é executado e tem um método main(), e é nele que você tem que implementar tal código. Já se você não souber qual é o numero para o contador você pode criar um progressBar indeterminado assim:
progressBar.setIndeterminate(true);
Você executa uma série de procedimentos para carregar isso que você me disse, e essa série de coisas tem que ser disparado pelo SwingWorker para que ele possa controlar seu JProgressBar…
Telinha abre com progressBar > SwingWorker inicia o carregamento das telas > SwingWorker controla estado do progressBar > SwingWorker finaliza > telinha fecha > seu frame principal abre
@Satangozo
Estou dando uma olhada aqui
Se não for pedir de mais, e se não for dar muito trabalho, tem como me dar um código simples, para eu conseguir entender melhor?
Vlw mano
[quote=Satangozo]
//codigo que abre a tela 1
progressBar.setValue((cont/3)*100);
cont++;
//codigo que abre a tela 2
progressBar.setValue((cont/3)*100);
cont++;
//codigo que abre a tela 3
progressBar.setValue((cont/3)*100);
cont++;[/quote]
Não tinha visto o código, vou testar aqui, e depois te dou a resposta se deu certo. obrigado por enquanto
Não obtive o resultado que eu gostaria amigo.
Vou continuar aguardando sugestões. Mas muito obrigado!