JProgressBar e JButton [RESOLVIDO]

2 respostas
ribeiro220

Boa noite,
Ao acionar o botão bt,teoricamente o mesmo irá através da classe liga,ir preenchendo a barra JProgress aos poucos,no exemplo até 30%.
O problema é que primeiro executa os Treads.sleep e já vai direto pro 30%.
Alguém já passou por situação semelhante?

Desde já agradeço.

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class Barra extends JFrame{
JFrame jf;
JProgressBar jp;
JButton bt;
void Barra(){
	jf = new JFrame("Motores  INICIO 28/02/2011");
	jf.setLocation(277,350);
	jf.setLayout(null);
	jf.getContentPane().setBackground(Color.YELLOW);
	jf.setSize(777, 333);
	jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
	
	bt = new JButton(); 
	jf.add(bt);
	bt.setBounds(40,40, 230, 50);
	bt.addActionListener(new liga());	 
	jp = new JProgressBar(); 
	jf.add(jp);
	jp.setBounds(440,40, 230, 50);
	jp.setMinimum(0);
	jp.setMaximum(100);
	jp.setStringPainted(true);
    jf.setVisible(true);
  	
	}
public class liga implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent arg0) {
		System.out.println("OI");
	
          
                try {
                	jp.setValue(10);   // pinta a JProgress em 10%
					Thread.sleep( 500 );
					jp.setValue(20);   // pinta a JProgress em 20%
					Thread.sleep( 500 );
					jp.setValue(30);   // pinta a JProgress em 30%
				} catch (InterruptedException e) {
					e.printStackTrace();
				} // coloca a "thread" para "dormir" 1 segundo
               
               }
}  
 
		
	 
public static void main(String args[]){
	Barra br = new Barra();
	br.Barra();
	

 }


}

2 Respostas

montroni

Ribeiro é que na verdade embora o compilador não acuse mas você esta fazendo o uso da Thread de forma incorreta, então irei postar o código modificado abaixo para que voce possa visualizar, o mais comum no uso de Thread é escrever uma classe que implementa runnable e a partir dai instanciar um Thread que irá executar esta classe:

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class Barra extends JFrame{
JFrame jf;
JProgressBar jp;
JButton bt;
void Barra(){
    jf = new JFrame("Motores  INICIO 28/02/2011");
    jf.setLocation(277,350);
    jf.setLayout(null);
    jf.getContentPane().setBackground(Color.YELLOW);
    jf.setSize(777, 333);
    jf.setDefaultCloseOperation(EXIT_ON_CLOSE);

    bt = new JButton();
    jf.add(bt);
    bt.setBounds(40,40, 230, 50);
    bt.addActionListener(new liga());
    jp = new JProgressBar();
    jf.add(jp);
    jp.setBounds(440,40, 230, 50);
    jp.setMinimum(0);
    jp.setMaximum(100);
    jp.setStringPainted(true);
    jf.setVisible(true);

    }
public class liga implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        System.out.println("OI");
                    ThreadProgresso p = new ThreadProgresso();
                    p.setProgress(jp);
                    Thread t = new Thread(p);
                    t.start();
               }
}



public static void main(String args[]){
    Barra br = new Barra();
    br.Barra();
}


}


class ThreadProgresso implements Runnable{

    private JProgressBar j;

    public void setProgress(JProgressBar j) {
        this.j = j;
    }

    public void run() {
                   try{
                    j.setValue(10);   // pinta a JProgress em 10%
                    Thread.sleep( 500 );
                    j.setValue(20);   // pinta a JProgress em 20%
                    Thread.sleep( 500 );
                    j.setValue(30);   // pinta a JProgress em 30%

                   } catch ( InterruptedException e){
                           System.out.println("Houve um erro ao pausar a thread");
                   }
}
}

Observe que existe a necessidade de criar um metodo que aqui chamei de setProgress para que a classe ThreadProgresso possa altera-lo em seu formulário.

Espero ter ajudado e lembro que se o seu problema for resolvido com o exemplo acima favor alterar o nome da mensagem para RESOLVIDO.

ribeiro220

montroni
Funcionou!!! :smiley:
Já estava até com dor de cabeça de tanto ficar em frente ao micro tentando resolver esse problema.
sou novo na área e não tenho feito nenhum curso sobre o assunto,o que tenho é muita vontade em aprender …leio muito mas tem coisas que é só errando pra aprender
Parabens pela iniciativa e pelo empenho em ajudar,continue assim que com certeza um dia voce vai colher coisas boas
DEUS TE ABENÇOE

Criado 4 de março de 2011
Ultima resposta 5 de mar. de 2011
Respostas 2
Participantes 2