Galera, consegui fazer com que meu JasperReports receba meu ArrayList, porem encontrei um problema. Eh o seguinte, eu preciso gerar minhas etiquetas conforme o cliente digita a quantidade, eu fiz isso usando um for mas o que acontece eh q qdo o ArrayList entra em modo de add, ele conta como 2 objetos internos, assim se eu mando imprimir 1 etiqueta ele gera 2 e se mando imprimir 2 etiquetas ele insere 4 e por ai vai.
Stringarquivo="relatorios/Etiquetas.jasper";java.io.InputStreamfile=getClass().getClassLoader().getResourceAsStream(arquivo);intqtd_Etiquetas=0;qtd_Etiquetas=Integer.parseInt(qtdEtiqueta.getText());intqtd_Embalagem=Integer.parseInt(qtdEmbalagem.getText());ArrayListlista=newArrayList();for(intx=0;x<qtd_Etiquetas;x++){lista.add(refEtiqueta.getText());// 0lista.add(corEtiqueta.getText());// 1}//aqui ta o problema, o ArrayList conta como 2 objetos internos, qdo mando isso para o iReport ele imprime 2 etiquetas sendo q informei apenas 1.Mapparametros=newHashMap();parametros.put("REFERENCIA",lista.get(0));parametros.put("COR",lista.get(1));JRDataSourcedados=newJRBeanCollectionDataSource(lista);JasperPrintprinter=JasperFillManager.fillReport(file,parametros,dados);JRViewerview=newJRViewer(printer);JDialogdialog=newJDialog();dialog.getContentPane().add(view);newAbreRelatorios().abreRelatorio(dialog);lista.clear();}
Resumindo, o ArrayList ta duplicando e esta correto pq são 2 objetos dentro dele, mas eu preciso que imprima uma etiqueta apenas qdo informado a qtd 1, e 2 qdo for informado 2 e assim sucessivamente…
Espero que tenham entendido.
for(int x = 0; x < qtd_Etiquetas; x++){
lista.add(refEtiqueta.getText()); // 0
lista.add(corEtiqueta.getText()); // 1
}
Pra cada passagem no laço, tu incluis dois itens na lista.
Usas os dois primeiros pra buscar referência e cor, mas o teu dataSource é gerado a partir do objeto "lista". Como o tamanho desse DS é o tamanho do "for" que o Jasper vai fazer, vai duplicar mesmo.
A minha dica é que você encapsule esse dados num só objeto (ref e cor) e passe aí sim um ArrayList deste objeto para o Jasper, assim não incorres no erro da duplicação.
Pelo que eu to vendo, ref e cor são parâmetros, não devias usar a listagem de dados pra buscar esses atributos - a não ser que possa variar a cor de etiquetas num mesmo relatório.
Não sei se fui claro… se não fui, reclama que eu tento organizar melhor as idéias.
Abraço!
fernandopaiva
Opa Leo…Obrigado pela atenção.
Manda um exemplo aew, por favor. !
obrigado
leoramos
Vou partir do princípio de que todas as tuas etiquetas têm COR e REF (não sei o que é isso, mas vamos lá) iguais, já que estás passando como parâmetro.
publicclassEtiqueta{privateStringtexto;//ou qualquer outra coisa que vá dentro da etiqueta, tô só supondo//getters e setters}
java.io.InputStreamfile=getClass().getClassLoader().getResourceAsStream(arquivo);intqtd_Etiquetas=0;qtd_Etiquetas=Integer.parseInt(qtdEtiqueta.getText());intqtd_Embalagem=Integer.parseInt(qtdEmbalagem.getText());ArrayListlista=newArrayList();for(intx=0;x<qtd_Etiquetas;x++){lista.add(/*insira aqui o teu objeto do tipo Etiqueta*/);// 0 }Mapparametros=newHashMap();//aqui é que o bicho mudaparametros.put("REFERENCIA",Integer.parseInt(refEtiqueta.getText()));parametros.put("COR",Integer.parseInt(corEtiqueta.getText()));
Agora, um porém: se tu não vais preencher a etiqueta com nada (texto, etc.) passa só uma string vazia dentro da lista no for, que vai funcionar igual. Nem cria a classe. Não é o jeito mais bonito, mas vai funcionar. No caso, pra cada laço do for:
lista.add("")
Espero ter ajudado. Qualquer coisa, grita ae.
Abraço!
fernandopaiva
Bom, agora sim consegui emitir etiqueta usando o JasperReports enviando um ArrayList por quantidade, para quem precisar aqui vai a maneira como fiz…
1 - Configuração do JasperReports/iReport
Propriedades do Relatorio -> Columns = 4 colunas -> Print Order = “Horizontal”.
2 - Codigo Java
//Criei uma classe chamada etiquetaspublicclassEtiquetas{privateStringreferencia="";privateStringcor="";publicvoidsetReferencia(Stringreferencia){this.referencia=referencia;}publicStringgetReferencia(){returnthis.referencia;}publicvoidsetCor(Stringcor){this.cor=cor;}publicStringgetCor(){returnthis.cor;}}//aqui o metodo que faz a impressao das etiquetaspublicvoidimprimeEtiquetas()throwsJRException{Stringarquivo="relatorios/Etiquetas.jasper";java.io.InputStreamfile=getClass().getClassLoader().getResourceAsStream(arquivo);intqtd_Etiquetas=0;inttotalEmbalagem=0;qtd_Etiquetas=Integer.parseInt(qtdEtiqueta.getText());intqtd_Embalagem=Integer.parseInt(qtdEmbalagem.getText());if(qtd_Embalagem>0&&unidVenda.getSelectedItem().toString().equals("DZ")){totalEmbalagem=qtd_Embalagem*12;}Etiquetasetiqueta=newEtiquetas();etiqueta.setReferencia(refEtiqueta.getText());etiqueta.setCor(corEtiqueta.getText());ArrayListlista=newArrayList();for(intx=0;x<qtd_Etiquetas;x++){lista.add(etiqueta);}Mapparametros=newHashMap();JRDataSourcedados=newJRBeanCollectionDataSource(lista);parametros.put("REFERENCIA",etiqueta.getReferencia());parametros.put("COR",etiqueta.getCor());JasperPrintprinter=JasperFillManager.fillReport(file,parametros,dados);JRViewerview=newJRViewer(printer);JDialogdialog=newJDialog();dialog.getContentPane().add(view);newAbreRelatorios().abreRelatorio(dialog);}
To colocando todo o código aqui pq pesquisei muiiiiiiito e encontrei muito pouca coisa, quase nada, e pedi muita ajuda aqui, e quero agradecer a todos aqueles que se propuzeram a me ajudar.