Ola pessoal, sou novo por aqui… e estou com um problema com o JProgressBar.
É a primeira vez que uso e pesquisei bastante e não estou entendendo o que esta ocorrendo.
O que eu quero fazer é simples, quando o usuario clicar no botão salvar da interface o meu sistema executa comandos sql que é muito demorado e eu quero que apareça uma JProgressBar que simplesmente “finge” para que o usuario nao pense que travou.
só que esta acontecendo o seguinte:
quando o usuario clicar no botão salvar, é criado o objeto da classe que cria o JprogressBar e dou o setVisble(true) só que nao executa o comando da linha de baixo que é o codigo demorado.
somente se o usuario fechar o JProgressBar é que é executado a linha de baixo
essa é a classe que cria o JProgressBar
public class Progress extends JDialog {
private JProgressBar progressBar;
public Progress(TelaMatriculaCadastroAlunos parent, boolean modal) {
super(parent, modal);
setSize(400, 80);
this.setResizable(false);
this.setLocationRelativeTo(null);
setContentPane(getProgressBar());
}
public void setMensagem(String msg) {
progressBar.setString(msg);
}
private Container getProgressBar() {
progressBar = new JProgressBar();
progressBar.setIndeterminate(true);
progressBar.setStringPainted(true);
return progressBar;
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Progress progre = new Progress(null, true);
progre.setVisible(true);
}
});
}
}
e esse aqui é o comando que esta no Action do botão Salvar
Progress p = new Progress(this, true);
p.setMensagem("SALVANDO... AGUARDE");
p.setVisible(true);
atualizarTabelaAlunosDaTurma(idTurma); // só executa se fechar a tela do JProgressBar
p.dispose();
alguem poderia me ajudar, não sei o que esta de errado
atualizarTabelaAlunosDaTurma(idTurma); tem de ser executado em uma thread que não é a mesma do Swing. Se ele for executado na mesma thread, a repintura da tela será congelada e o progress bar não funcionará como desejado.
Entendi, vou fazer aqui e qualquer duvida se deu certou ou não eu informo, a momento obrigado!
entanglement não sei se estou fazendo errado mais continua da mesma forma. olha como ficou meu codigo
Classe que cria o JProgressBar
public class Progress extends JDialog {
private JProgressBar progressBar;
private TelaMatriculaCadastroAlunos telaMatricula;
public Progress(TelaMatriculaCadastroAlunos parent, boolean modal) {
super(parent, modal);
telaMatricula = parent;
setSize(400, 80);
this.setResizable(false);
this.setLocationRelativeTo(null);
setContentPane(getProgressBar());
Thread t = new Thread(new ProgressRunnable());
t.run();
}
public void setMensagem(String msg) {
progressBar.setString(msg);
}
private Container getProgressBar() {
progressBar = new JProgressBar();
progressBar.setIndeterminate(true);
progressBar.setStringPainted(true);
return progressBar;
}
private class ProgressRunnable implements Runnable {
public void run() {
try {
EventQueue.invokeLater(new Runnable() {
public void run() {
telaMatricula.atualizarTabelaAlunosDaTurma(telaMatricula.idTurma);
}
});
Thread.sleep(0);
} catch (InterruptedException ex) {
ex.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Progress progre = new Progress(null, true);
progre.setVisible(true);
}
});
}
}
E o codigo que esta no Action do Salvar
Progress p = new Progress(this, true);
p.setMensagem("SALVANDO... AGUARDE");
p.setVisible(true);
p.dispose();
Se o seu JProgresBar for “indeterminate”, eu acho que o jeito mais f’acil de montar seria com SwingWorker, segue exemplo:
private void metodoQualquer(){
new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
try{
jProgressBar1.setVisible(true);
jProgressBar1.setIndeterminate(true);
//faz alguma coisa....
}
catch(Exception e ){
e.printStackTrace();
JOptionPane.showMessageDialog(null, e.getMessage());
}
return null;
}
@Override
protected void done() {
jProgressBar1.setVisible(false);
}
}.execute();
}
Da uma olhada aqui tambem:
http://www.guj.com.br/java/245786-jprogressbar-com-swingworker-
http://www.guj.com.br/java/287920-progressbar-nao-dispara
http://www.guj.com.br/java/48799-exemplo-de-jprogressbar
Valew amigo, vou verificar e qualquer coisa eu posto aqui