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