fabim
Dezembro 26, 2006, 6:39pm
#1
Oi pessoal,
segue um exemplo pronto, pra galera q tem duvida de como usar a JProgressBar:
para usar o SwingWorker, vc precisa baixa-lo em:
https://swingworker.dev.java.net/
basta baixar o .jar e adiciona-lo ao seu classpath…
O evento abaixo ocorre qdo meu painel de digitais e mostrado:
this.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent e) {
final Progress p = new Progress();
p.setVisible(true);
SwingWorker worker = new SwingWorker(){
@Override
protected Object doInBackground() throws Exception {
carregarDigitais(); // meu processo demorado
return null;
}
@Override
protected void done() {
p.setVisible(false);
}
};
worker.execute();
}
});
abaixo a classe q so constroi a janelinha com a UI…
public class Progress extends JDialog {
public Progress() {
this.setTitle("Aguarde...");
setModal(false);
JProgressBar progress = new JProgressBar();
progress.setIndeterminate(true);
progress.setSize(200,20);
getContentPane().add(progress);
pack();
Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((tela.width - this.getSize().width) / 2,
(tela.height - this.getSize().height) / 2);
}
}
Show de bola velho!!!vlw!!
Esse tópico é antigo mas ajuda até hoje.
Valeu cara.
seudito
Dezembro 9, 2009, 10:46am
#5
Simples de implementar e funciona direitinho… me salvou… :lol:
eh me salvo tambem…
só nao sei porque o meu não estava funcionando… e desse jeito funiona 'oO
mt bom =D
rcviana
Dezembro 23, 2009, 6:09pm
#7
Quarta-Feira, dia 23 de DEZEMBRO…
Esse post salvou meu Natal…
Valeu Fabim !
Abraços.
Só para lembrar, o SwingWorker faz parte do JDK a partir da versão 6.
[]´s
oitathi
Dezembro 14, 2010, 1:37pm
#9
Como sera essa implementação acionada por um botão???
to tentando implementar esse código para abrir um jdialog q é pesando pois carrega um jtable…
mas o worker.execute(); nao ta reconhecendo, ta pedindo para implementar esse método…
e outra ta pedindo tbm para implementar o método Construct().
o que to fazendo de errado?
[code] final Progress p = new Progress();
p.setVisible(true);
SwingWorker worker = new SwingWorker(){ //aki da dando um erro
protected Object doInBackground() throws Exception {
PesquisarSolicitacao psol = new PesquisarSolicitacao(JPrincipal.this,true);
psol.setVisible(true);
return null;
}
protected void done() {
p.setVisible(false);
}
};
worker.execute(); //e aki tbm ta dando erro [/code]
pvinck
Janeiro 10, 2013, 1:05pm
#11
Ressucitando o post:
O link para o swingWorker está fora, alguém poderia disponibilizar se tiver?
Obrigado
Ele agora é parte do JDK oficial:
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html
Não é mais necessário baixa-lo.
Outra coisa, não deixe seu e-mail no fórum. Se vc pergunta no fórum, a resposta também tem que ser no fórum. Assim, todo mundo é ajudado.
pvinck
Janeiro 10, 2013, 7:29pm
#13
Obrigado ViniGodoy pela dica,
porém não consegui implementar o que estou querendo.
o que acontece… tenho um resultSet que retorna n registros, gostaria de ligar meu
progress ao resultado do resultset…
sendo que enquanto vai sendo executado o código…
while(rs.next()){
//aqui um contador... para o valor do progress
}
ele fosse setando… mas como não sei qual vai ser quantidade complicou um pouco a coisa.
alguém tem alguma dica de como fazer essa funcionalidade?
Faz uma consulta de count antes.
Ou usa um JProgessbar com setIndeterminate(true);
Após o p.setVisible(false); é bom colocar p.dispose(); para matar o processo;
Utilizando um botão:
private void bt_gerarActionPerformed(java.awt.event.ActionEvent evt) {
final Progress p = new Progress();
p.setVisible(true);
SwingWorker worker = new SwingWorker(){
@Override
protected Object doInBackground() throws Exception {
gerarRel(); // meu processo demorado
return null;
}
@Override
protected void done() {
p.setVisible(false);
}
};
worker.execute();
}
Além de você ter ressucitado um tópico que estava resolvido a 11 meses, você passou uma informação errada. O dispose() não mata nenhum processo, nem fará a janela ser coletada. A única coisa que faz isso é eliminar todas as referências, permitindo que o garbage collector atue. Caso contrário, não seria possível fazer setVisible novamente.
O que o Swing diz é que o dispose() irá fazer com que a janela retorne os recursos que alocou no sistema operacional. Isso significa que ela pode ficar mais lenta para ser carregada da próxima vez, mas que irá liberar um pouco de memória. É o ideal para janelas que são abertas com pouca frequencia, mas não para janelas que aparecem e somem o tempo todo na aplicação, como a de um JProgressBar.
Evite ressuscitar tópicos. E quando o fizer tenha certeza de que está contribuindo com uma informação REALMENTE relevante.
[quote=jefersoncj]Utilizando um botão:
[code]
private void bt_gerarActionPerformed(java.awt.event.ActionEvent evt) {
final Progress p = new Progress();
p.setVisible(true);
SwingWorker worker = new SwingWorker(){
@Override
protected Object doInBackground() throws Exception {
gerarRel(); // meu processo demorado
return null;
}
@Override
protected void done() {
p.setVisible(false);
}
};
worker.execute();
}
[/code][/quote]
Como faço pra adicionar um método como esse como ação de um JButton? O addActionListener não aceita um método void como argumento.
E qual ActionEvent eu devo passar como argumento para esse método?