Progress Bar tempo Maximo

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

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

    jPanel1.add(progressBar);
    progressBar.setBounds(20, 130, 550, 40);
    progressBar.setVisible(false);[/code]

valeu!

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

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.

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

[code]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[/code]

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].

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(); }

Isso mesmo !

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

ta frodis resolver isso…eheh

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.

então eu fiz essa classe para fazer isto

[code]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);  
    }[/code]

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?

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.

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.

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…

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.

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

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.

[quote=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.[/quote]

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: [code]
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);
    }   
}

}

[/code]

agora a acao do botao onde ele pede o arquivo e ler no console: [code]
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();
        }
}           

[/code]

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

Agradeço Desde Já!