Progress Bar tempo Maximo

17 respostas
R

Galera to com um problema, estou criando um progress bar , mas tem um problema quando mando imprimir um relátorio o contador do progress bar deveria auto completar.

ex:
se clicar no botão de imprimir o progressbar ativa e assim começa o contador do arquivo e imprimi o relátorio em seguida , mas n sei de que forma fazer posso fazer com que quando imprimir completasse os 1oo% antes de imprimir

progressBar.setStringPainted(true);
        Border border = BorderFactory.createTitledBorder("Processando aguarde...");
        progressBar.setBorder(border);

        jPanel1.add(progressBar);
        progressBar.setBounds(20, 130, 550, 40);
        progressBar.setVisible(false);

valeu!

17 Respostas

V

Tópico movido para o fórum de interface gráfica.

M

jprogressbar1.setMaximum(X) - X=Numero de vezes que voce irá incrementar a barra até que ela esteja completa
depois
jprogressbar1.setValue(jprogressbar1.getValue()+1) - aumenta em 1 o valor atual da barra.

R

olha só como to fazendo mas não implementei o que voce passou...onde eu vou colocar seu codigo aqui?

try {
                    new Thread(new Runnable(){
                        public void run(){
                            progressBar.setVisible(true);
                            strNomeArq =arq.getSelectedFile().getName();
                            strCaminhoclick = txtArquivo.getText().toString();
                            LerArquivo arquivo = new LerArquivo();
                            try {
                                arquivo.caminho(strCaminhoclick,strNomeArq);
                            }catch (Exception e) {
                                // TODO: handle exception
                            } catch (Throwable e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }).start();//inicia a thread das outras classes

                    new Thread( new Runnable() {
                        public void run() {

                            ContaLinha contPath = new ContaLinha();
                            contPath.caminhoCont(strCaminhoeNomeArq);
                            intNumLinhas = Integer.parseInt(Integer.toString(contPath.totLinha));//calcula o numero de linhas do arquivo
                            if (intNumLinhas <100){
                                intNumLinhas = 100;
                            }
                           
                            for( int i = 0; i <= intNumLinhas; i++ ) {
                                progressBar.setValue( i );
                                try {
                                    Thread.sleep(1000); // 1s
                                } catch( Exception e ) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    } ).start();   //inicia a thread progressBar
M

Pelo que entendi voce quer a cada linha incrementar o valor…
o setValue está certo, só faltou voce definir o progressBar.setMaximum(intNumLinhas) antes de iniciar o [color=blue]for[/color].

R

dessa forma ?
progressBar.setMaximum(intNumLinhas); for( int i = 0; i <= intNumLinhas; i++ ) { progressBar.setValue( i ); try { Thread.sleep(1000); // 1s } catch( Exception e ) { e.printStackTrace(); }

M

Isso mesmo !

R

então , porém ele imprimi o relatorio antes de acabar o progress bar …pq não deu certo!

ta frodis resolver isso…eheh

M

Sim mas aí está faltando alguma coisa dentro do laço…
Pois a unica coisa que está acontecendo aí é o sistema parar 1 segundo e depois aumentar o valor do progressBar…
Não vi nada explicito no seu codigo aonde ele imprime um relatório.
Se voce faz a leitura das linhas do arquivo pra fazer o relatorio, poderia fazer um esquema assim:
-definir o setMaximum do progressBar de acordo com o nº de linhas do arquivo
-Iniciar o laço for para ler linha por linha
-Para cada vez que passar no for, voce le uma linha e aumenta o value do progressBar.

R

então eu fiz essa classe para fazer isto

public  String nextLine = null; 
	    private String caminhoPath;
	    public int totLinha;
	    public String caminhoCont(String caminhoarquivo){ //throws FileNotFoundException {

	    caminhoPath = 	caminhoarquivo;
        LineNumberReader lineCounter;
		try {
			lineCounter = new LineNumberReader(new InputStreamReader(new FileInputStream(caminhoPath)));
			 try {   
		            while ((nextLine = lineCounter.readLine()) != null) {   
		                if (nextLine == null)   
		                    break;   
		                //System.out.println(nextLine);   
		            } 
		            totLinha = lineCounter.getLineNumber();
		            //System.out.println("Total DE LINHA DESTE ARQUIVO  " + lineCounter.getLineNumber());   
		        } catch (Exception done) {   
		            done.printStackTrace();   
		        }
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}   
 
	return Integer.toString(totLinha);  
	    }
M

Me explica uma coisa pois nao consegui entender direito… O seu relatório mostra o que exatamente?
O conteúdo do arquivo?
E voce gostaria que a barra de progresso carregasse, e quando terminasse de carregar voce mostraria o conteudo do arquivo pro usuário?

R

mostra os erros contendo no relatorio txt, em formato pdf.

isso, mas carregasse por completo e assim que terminar de fazer todo o processo o contador ira processar a impressao.

M

ah se voce quiser fazer com que o progressBar aumente conforme o progresso da impressão eu acredito que não tem como, pois voce tem que setar o valor do progressBar durante a execução do código.
Não sei como é seu método de impressão, mas geralmente não temos controle sobre o código desse método, impossibilitando de fazer uma barra de progresso…
Existe aquela barra de progresso infinita, mas como ela não indica o progresso real minha opinião é que ela não faz diferença.

R

sabe pq falo isso, faz de conta que o arquivo txt é pequeno , vou ter que esperar completar os 100%, caso poderia que o arquivo ja foi montado completasse rapidamente e imprimisse…
entende…é meio complicado mesmo essas coisas…

M

Se eu entendi bem o que voce quer, isso me parece uma gambiarra…
Por lógica, se o arquivo é pequeno a barra de progresso deve ser completada quase instantaneamente, não tem porque ficar aumentando fazendo parecer que o sistema esta processando alguma coisa sendo que essa alguma coisa ja foi processada.

R

mas se o arquivo ja foi processado o progress bar poderia alto completar e imprimir…

sabe pq …ele o relatorio é impresso e o progress bar fica ainda rodando isso nos 10 % rs

M

Ahhh agora entendi…
É porque voce está setando o value do progressBar em um bloco de código diferente do bloco que faz a impressão e geração do relatório.
O ideal é que voce faça tudo no mesmo bloco.
Quanto a impressão eu acredito que nao da pra fazer com a barra… mas na leitura do arquivo é perfeitamente possível. É só voce setar o valor logo depois de executar o método readLine do seu BufferedReader.

L
mateusviccari:
Se eu entendi bem o que voce quer, isso me parece uma gambiarra... Por lógica, se o arquivo é pequeno a barra de progresso deve ser completada quase instantaneamente, não tem porque ficar aumentando fazendo parecer que o sistema esta processando alguma coisa sendo que essa alguma coisa ja foi processada.
Ola, Tenho um projeto e quero que ao ler o arquivo, a barra de progresso me mostre a transação do arquivo, vou postar o codigo aqui do Ler Arquivo:
package testesqlite;

import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

public class LerArquivo {
   
    private int cont ;
    
    
    public int getCont() {
        return cont;
    }

    public void setCont(int cont) {
        this.cont = cont;
    }

    public void Ler(String string, Biblia biblia) throws IOException, BiffException {
       
        
        Workbook wk = Workbook.getWorkbook(new File(string));
        //new File("VT-01-Gànesis.xls")
        //abertura da planilia
        Sheet st = wk.getSheet(0);
        //variavel linhas
        int lin = st.getRows();
        
        //barra = new JProgressBar();
        //barra.setMaximum(lin);
        for (int i = 0; i < lin; i++) {
            Cell a1 = st.getCell(0, i);
            Cell a2 = st.getCell(1, i);
            Cell a3 = st.getCell(2, i);
            Cell a4 = st.getCell(3, i);

            String as1 = a1.getContents();
            String as2 = a2.getContents();
            String as3 = a3.getContents();
            String as4 = a4.getContents();

            biblia.setLivro(as1);
            biblia.setCapitulo(as2);
            biblia.setVersiculo(as3);
            biblia.setTexto(as4);

            System.out.print(as1 + " - ");
            System.out.print(as2 + " - ");
            System.out.print(as3 + " - ");
            System.out.println(as4);
            this.setCont(i);
            System.out.println("Arquivo com: " + i);
        }   
    }
}
agora a acao do botao onde ele pede o arquivo e ler no console:
private void jButtoncarregarArquivoActionPerformed(java.awt.event.ActionEvent evt) {                                                       
        //int i = 0;
        try{    
            JFileChooser abertura = new JFileChooser();
            LerArquivo la = new LerArquivo();
            SQLite dbCon = new SQLite("biblia.db");
            Biblia biblia = new Biblia();
            biblia.getLivro();
            biblia.getCapitulo();
            biblia.getVersiculo();
            biblia.getTexto();

            dbCon.initDB();
            // Possibilita a seleção de vários arquivos
            abertura.setMultiSelectionEnabled(true);
            abertura.showOpenDialog(null);
            File[] files = abertura.getSelectedFiles();           
            for (File file : files) {
                jLabelarquivoLido.setText(file.getName());
                la.Ler(file.toString(), biblia);
                System.out.println(la.getCont());
                }
                    
            }catch(Exception e){
                e.getMessage();
            }
    }

como eu faço pra colocar uma barra de progresso?

Agradeço Desde Já!

Criado 24 de maio de 2012
Ultima resposta 2 de ago. de 2014
Respostas 17
Participantes 4