Salve galera…To tentando montar um exemplo pelo que ja vi com JProgressBar e SwingWorker, quero fazer com que a barra va se preenchendo.
to tentando assim:
publicclassProgressBar{JProgressBarbarra;publicvoidexecutaProgresso(JProgressBarprogresso){this.barra=progresso;barra.setMinimum(0);barra.setMaximum(100);barra.setStringPainted(true);SwingWorkerworker=newSwingWorker(){@OverrideprotectedObjectdoInBackground()throwsException{for(intx=0;x<=10000;x++){barra.setValue(x);}returnnull;}protectedvoiddone(){//barra.setValue(0);System.out.println("Feito...");}};worker.execute();}//aqui invoco o metodoprivatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){newProgressBar().executaProgresso(progresso);}
Nao consigo fazer com que a barra va se preenchendo. Usando setIndeterminate(true), funciona, a barra fica processando ateh acabar a contagem, mas com a porcentagem naum preenche, ja aparece a barra com 100% sem mostrar o preenchimento gradativo…
Alguem tem alguma ideia de o pq essa barra naum vai se preenchendo gradativamente ??
1. O loop vai rodar muitíssimo rápido, você dificilmente vai ver a barra sendo preenchida com um loop assim;
2. Se o seu contador vai até 10.000 porque o máximo da sua barra está definido em 100?
O código certo seria assim:
publicclassProgressBar{JProgressBarbarra;publicvoidexecutaProgresso(JProgressBarprogresso){this.barra=progresso;barra.setMinimum(0);barra.setMaximum(10000);barra.setStringPainted(true);SwingWorkerworker=newSwingWorker(){@OverrideprotectedObjectdoInBackground()throwsException{try{for(intx=0;x<=10000;x++){barra.setValue(x);Thread.sleep(20);//Espera 20ms}}catch(InterruptedExceptione){}returnnull;}protectedvoiddone(){//barra.setValue(0);System.out.println("Feito...");}};worker.execute();}//aqui invoco o metodoprivatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){newProgressBar().executaProgresso(progresso);}
V
ViniGodoy
Agora sim, corrigi. Acidentalmente tinha copiado o código errado do leonardobhbr, não o seu código.
F
fernandopaiva
Opa Vini e leo, td blz com vcs ???
Muito obrigado pela atenção, vou fazer mais testes qquer coisa posto aqui.
t+
R
rodrigomuribec
Abaixo o código de uma pequena modificação, onde o tamanho do progressbar é variável de acordo com algum parâmetro do usuário:
importjavax.swing.JOptionPane;importjavax.swing.SwingWorker;publicclassPrincipalextendsjavax.swing.JFrame{publicPrincipal(){initComponents();}@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code">privatevoidinitComponents(){botao=newjavax.swing.JButton();pb=newjavax.swing.JProgressBar();jLabel1=newjavax.swing.JLabel();tfImagens=newjavax.swing.JTextField();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);botao.setText("Importar");botao.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEventevt){botaoActionPerformed(evt);}});pb.setStringPainted(true);jLabel1.setText("Quantidade de imagens:");javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup().addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(tfImagens,javax.swing.GroupLayout.PREFERRED_SIZE,119,javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(botao)).addComponent(pb,javax.swing.GroupLayout.PREFERRED_SIZE,347,javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(24,24,24)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup().addContainerGap(108,Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(tfImagens,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(botao)).addGap(54,54,54).addComponent(pb,javax.swing.GroupLayout.PREFERRED_SIZE,37,javax.swing.GroupLayout.PREFERRED_SIZE).addGap(78,78,78)));pack();}// </editor-fold>privatevoidbotaoActionPerformed(java.awt.event.ActionEventevt){finalintnumImages=Integer.parseInt(tfImagens.getText());SwingWorkerworker=newSwingWorker(){@OverrideprotectedObjectdoInBackground()throwsException{pb.setMaximum(numImages);for(intx=0;x<=pb.getMaximum();x++){pb.setValue(x);Thread.sleep(200);}returnnull;}protectedvoiddone(){//barra.setValue(0); System.out.println("Feito...");JOptionPane.showMessageDialog(null,"Progresso concluído");}};worker.execute();}publicstaticvoidmain(Stringargs[]){java.awt.EventQueue.invokeLater(newRunnable(){publicvoidrun(){newPrincipal().setVisible(true);}});}// Variables declaration - do not modifyprivatejavax.swing.JButtonbotao;privatejavax.swing.JLabeljLabel1;privatejavax.swing.JProgressBarpb;privatejavax.swing.JTextFieldtfImagens;// End of variables declaration}
A
andersonneto
Essa classe
me ajudou bastante!
Obrigado
V
ViniGodoy
andersonneto:
Essa classe
me ajudou bastante!
Obrigado
Por favor, não ressuscite tópicos antigos (esse tem mais de 3 anos) à toa.