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:
public class ProgressBar{
JProgressBar barra;
public void executaProgresso(JProgressBar progresso){
this.barra = progresso;
barra.setMinimum(0);
barra.setMaximum(100);
barra.setStringPainted(true);
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
for(int x = 0; x <= 10000; x++){
barra.setValue(x);
}
return null;
}
protected void done(){
//barra.setValue(0);
System.out.println("Feito...");
}
};
worker.execute();
}
//aqui invoco o metodo
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new ProgressBar().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 ??
obrigado
Tente assim amigo
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>()
{
@Override
protected Void doInBackground() throws Exception
{
barra.setMinimum(0);
barra.setMaximum(100);
barra.setStringPainted(true);
return null;
}
@Override
protected void done()
{
super.done();
for(int x = 0; x <= 10000; x++){
barra.setValue(x);
}
System.out.println("Feito...");
}
};
worker.execute();
Fernando o que você fez está certo. Porém:
- O loop vai rodar muitíssimo rápido, você dificilmente vai ver a barra sendo preenchida com um loop assim;
- 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:
[code]public class ProgressBar{
JProgressBar barra;
public void executaProgresso(JProgressBar progresso){
this.barra = progresso;
barra.setMinimum(0);
barra.setMaximum(10000);
barra.setStringPainted(true);
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
try {
for(int x = 0; x <= 10000; x++){
barra.setValue(x);
Thread.sleep(20); //Espera 20ms
}
} catch (InterruptedException e) {
}
return null;
}
protected void done(){
//barra.setValue(0);
System.out.println("Feito...");
}
};
worker.execute();
}
//aqui invoco o metodo
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new ProgressBar().executaProgresso(progresso);
}
[/code]
1 curtida
Agora sim, corrigi. Acidentalmente tinha copiado o código errado do leonardobhbr, não o seu código.
Opa Vini e leo, td blz com vcs ???
Muito obrigado pela atenção, vou fazer mais testes qquer coisa posto aqui.
t+
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:
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;
public class Principal extends javax.swing.JFrame {
public Principal() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
botao = new javax.swing.JButton();
pb = new javax.swing.JProgressBar();
jLabel1 = new javax.swing.JLabel();
tfImagens = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
botao.setText("Importar");
botao.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botaoActionPerformed(evt);
}
});
pb.setStringPainted(true);
jLabel1.setText("Quantidade de imagens:");
javax.swing.GroupLayout layout = new javax.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>
private void botaoActionPerformed(java.awt.event.ActionEvent evt) {
final int numImages = Integer.parseInt(tfImagens.getText());
SwingWorker worker = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
pb.setMaximum(numImages);
for (int x = 0; x <= pb.getMaximum(); x++) {
pb.setValue(x);
Thread.sleep(200);
}
return null;
}
protected void done() {
//barra.setValue(0);
System.out.println("Feito...");
JOptionPane.showMessageDialog(null, "Progresso concluído");
}
};
worker.execute();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton botao;
private javax.swing.JLabel jLabel1;
private javax.swing.JProgressBar pb;
private javax.swing.JTextField tfImagens;
// End of variables declaration
}
Essa classe
me ajudou bastante!
Obrigado
[quote=andersonneto]Essa classe
me ajudou bastante!
Obrigado[/quote]
Por favor, não ressuscite tópicos antigos (esse tem mais de 3 anos) à toa.