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
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
RiQuInHo_
olha só como to fazendo mas não implementei o que voce passou...onde eu vou colocar seu codigo aqui?
try{newThread(newRunnable(){publicvoidrun(){progressBar.setVisible(true);strNomeArq=arq.getSelectedFile().getName();strCaminhoclick=txtArquivo.getText().toString();LerArquivoarquivo=newLerArquivo();try{arquivo.caminho(strCaminhoclick,strNomeArq);}catch(Exceptione){// TODO: handle exception}catch(Throwablee){// TODO Auto-generated catch blocke.printStackTrace();}}}).start();//inicia a thread das outras classesnewThread(newRunnable(){publicvoidrun(){ContaLinhacontPath=newContaLinha();contPath.caminhoCont(strCaminhoeNomeArq);intNumLinhas=Integer.parseInt(Integer.toString(contPath.totLinha));//calcula o numero de linhas do arquivoif(intNumLinhas<100){intNumLinhas=100;}for(inti=0;i<=intNumLinhas;i++){progressBar.setValue(i);try{Thread.sleep(1000);// 1s}catch(Exceptione){e.printStackTrace();}}}}).start();//inicia a thread progressBar
M
mateusviccari
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
RiQuInHo_
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
mateusviccari
Isso mesmo !
R
RiQuInHo_
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
mateusviccari
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
RiQuInHo_
então eu fiz essa classe para fazer isto
publicStringnextLine=null;privateStringcaminhoPath;publicinttotLinha;publicStringcaminhoCont(Stringcaminhoarquivo){//throws FileNotFoundException {caminhoPath=caminhoarquivo;LineNumberReaderlineCounter;try{lineCounter=newLineNumberReader(newInputStreamReader(newFileInputStream(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(Exceptiondone){done.printStackTrace();}}catch(FileNotFoundExceptione){// TODO Auto-generated catch blocke.printStackTrace();}returnInteger.toString(totLinha);}
M
mateusviccari
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
RiQuInHo_
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
mateusviccari
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
RiQuInHo_
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
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.
R
RiQuInHo_
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
mateusviccari
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
lulukamagaiver
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:
packagetestesqlite;importjava.io.File;importjava.io.IOException;importjxl.Cell;importjxl.Sheet;importjxl.Workbook;importjxl.read.biff.BiffException;publicclassLerArquivo{privateintcont;publicintgetCont(){returncont;}publicvoidsetCont(intcont){this.cont=cont;}publicvoidLer(Stringstring,Bibliabiblia)throwsIOException,BiffException{Workbookwk=Workbook.getWorkbook(newFile(string));//new File("VT-01-Gànesis.xls")//abertura da planiliaSheetst=wk.getSheet(0);//variavel linhasintlin=st.getRows();//barra = new JProgressBar();//barra.setMaximum(lin);for(inti=0;i<lin;i++){Cella1=st.getCell(0,i);Cella2=st.getCell(1,i);Cella3=st.getCell(2,i);Cella4=st.getCell(3,i);Stringas1=a1.getContents();Stringas2=a2.getContents();Stringas3=a3.getContents();Stringas4=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:
privatevoidjButtoncarregarArquivoActionPerformed(java.awt.event.ActionEventevt){//int i = 0;try{JFileChooserabertura=newJFileChooser();LerArquivola=newLerArquivo();SQLitedbCon=newSQLite("biblia.db");Bibliabiblia=newBiblia();biblia.getLivro();biblia.getCapitulo();biblia.getVersiculo();biblia.getTexto();dbCon.initDB();// Possibilita a seleção de vários arquivosabertura.setMultiSelectionEnabled(true);abertura.showOpenDialog(null);File[]files=abertura.getSelectedFiles();for(Filefile:files){jLabelarquivoLido.setText(file.getName());la.Ler(file.toString(),biblia);System.out.println(la.getCont());}}catch(Exceptione){e.getMessage();}}