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.
String arquivo = "relatorios/Etiquetas.jasper";
java.io.InputStream file = getClass().getClassLoader().getResourceAsStream(arquivo);
int qtd_Etiquetas = 0;
qtd_Etiquetas = Integer.parseInt(qtdEtiqueta.getText());
int qtd_Embalagem = Integer.parseInt(qtdEmbalagem.getText());
ArrayList lista = new ArrayList();
for(int x = 0; x < qtd_Etiquetas; x++){
lista.add(refEtiqueta.getText()); // 0
lista.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.
Map parametros = new HashMap();
parametros.put("REFERENCIA", lista.get(0));
parametros.put("COR", lista.get(1));
JRDataSource dados = new JRBeanCollectionDataSource(lista);
JasperPrint printer = JasperFillManager.fillReport(file, parametros, dados);
JRViewer view = new JRViewer(printer);
JDialog dialog = new JDialog();
dialog.getContentPane().add(view);
new AbreRelatorios().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.
Obrigado
Cara, acho que tu tá confundindo as coisas ali.
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!
Opa Leo…Obrigado pela atenção.
Manda um exemplo aew, por favor. !
obrigado
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.
public class Etiqueta {
private String texto; //ou qualquer outra coisa que vá dentro da etiqueta, tô só supondo
//getters e setters
}
[code]
java.io.InputStream file = getClass().getClassLoader().getResourceAsStream(arquivo);
int qtd_Etiquetas = 0;
qtd_Etiquetas = Integer.parseInt(qtdEtiqueta.getText());
int qtd_Embalagem = Integer.parseInt(qtdEmbalagem.getText());
ArrayList lista = new ArrayList();
for(int x = 0; x < qtd_Etiquetas; x++){
lista.add(/*insira aqui o teu objeto do tipo Etiqueta*/ ); // 0
}
Map parametros = new HashMap();
//aqui é que o bicho muda
parametros.put("REFERENCIA", Integer.parseInt(refEtiqueta.getText()));
parametros.put("COR", Integer.parseInt(corEtiqueta.getText())); [/code]
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:
Espero ter ajudado. Qualquer coisa, grita ae.
Abraço!
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 etiquetas
public class Etiquetas{
private String referencia = "";
private String cor = "";
public void setReferencia(String referencia){
this.referencia = referencia;
}
public String getReferencia(){
return this.referencia;
}
public void setCor(String cor){
this.cor = cor;
}
public String getCor(){
return this.cor;
}
}
//aqui o metodo que faz a impressao das etiquetas
public void imprimeEtiquetas() throws JRException{
String arquivo = "relatorios/Etiquetas.jasper";
java.io.InputStream file = getClass().getClassLoader().getResourceAsStream(arquivo);
int qtd_Etiquetas = 0;
int totalEmbalagem = 0;
qtd_Etiquetas = Integer.parseInt(qtdEtiqueta.getText());
int qtd_Embalagem = Integer.parseInt(qtdEmbalagem.getText());
if(qtd_Embalagem > 0 && unidVenda.getSelectedItem().toString().equals("DZ")){
totalEmbalagem = qtd_Embalagem * 12;
}
Etiquetas etiqueta = new Etiquetas();
etiqueta.setReferencia(refEtiqueta.getText());
etiqueta.setCor(corEtiqueta.getText());
ArrayList lista = new ArrayList();
for(int x = 0; x < qtd_Etiquetas; x++){
lista.add(etiqueta);
}
Map parametros = new HashMap();
JRDataSource dados = new JRBeanCollectionDataSource(lista);
parametros.put("REFERENCIA", etiqueta.getReferencia());
parametros.put("COR", etiqueta.getCor());
JasperPrint printer = JasperFillManager.fillReport(file, parametros, dados);
JRViewer view = new JRViewer(printer);
JDialog dialog = new JDialog();
dialog.getContentPane().add(view);
new AbreRelatorios().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.
leoramos, obrigado mano véio !
obrigado a todos.