quantidade de linhas muda, a quantidade de colunas é igual, pense nos produtos (a lista em questão) como o resultado de um select
mandei meu código (lembrando que System.getenv(“TCTCL_LIBRARY_PATH”) é uma variável de ambiente que retornará o diretório do meu projeto
eu recebo os valores por parametro em uma string gigante, separados por "|"
no java eu separo tudo, coloco os parametros “do relatorio” no hashmap e os produtos, em uma lista, e mando pro jasper, porém ele retorna o erro:
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : qtdeReg
qtdeReg é o primeiro field que o jasper busca ( $F{qtdeReg} )
[code]import java.sql.*;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.view.JasperViewer;
import java.io.;
import java.util.;
import javax.swing.;
import java.awt.;
import java.awt.event.;
import java.beans.;
import java.util.Random;
public class chamaJasper extends JFrame {
private JLabel label;
private static String nomprograma;
private static String nomParam;
private static String valParam;
private static String qtdeReg;
public chamaJasper(String nomPrograma) {
super(“Gerando Relatório…”);
label = new JLabel("Aguarde, Processando...",JLabel.CENTER);
label.setIcon(new javax.swing.ImageIcon(System.getenv("TCTCL_LIBRARY_PATH")+"/img006.isi"));
label.setHorizontalTextPosition(JLabel.RIGHT);
JButton botao = new JButton("Cancelar");
botao.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);
JPanel panel = new JPanel();
panel.setSize(265,140);
panel.add(label);
panel.add(botao);
add(panel);
}
public static void main(String arg[]) {
HashMap parametros = new HashMap();
StringTokenizer param = new StringTokenizer(arg[0], “|”);
java.util.List listaProdutos = new ArrayList();
while (param.hasMoreTokens()) {
nomParam = param.nextToken();
if (nomParam.equals(“produtos”)) {break;} else {
if (nomParam.equals("")) break;
valParam = param.nextToken();
if (nomParam.equals(“nomprograma”)) {nomprograma = valParam;}
parametros.put(nomParam, valParam);
}
}
//buscando os produtos
java.util.List ls = new ArrayList();
qtdeReg = param.nextToken();
ls.add(qtdeReg);
while (param.hasMoreTokens()) {
nomParam = param.nextToken();
ls.add(nomParam);
}
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getScreenSize();
int sw = dim.width;
int sh = dim.height;
chamaJasper janela = new chamaJasper(nomprograma);
janela.setLocation((sw / 4) + 125, (sh / 4) + 85);
janela.setSize(265,140);
janela.setVisible(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
Class.forName("org.postgresql.Driver");
parametros.put("SUBREPORT_DIR", System.getenv("TCTCL_LIBRARY_PATH") + "/Jasper/");
JRDataSource jrds = new JRBeanCollectionDataSource(ls);
JasperPrint jasperPrint = JasperFillManager.fillReport(System.getenv("TCTCL_LIBRARY_PATH") + "/Jasper/" + nomprograma + "report.jasper", parametros, jrds);
JasperViewer.viewReport(jasperPrint);
janela.dispose();
}
catch (JRException e) {
e.printStackTrace();
System.exit(0);
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
System.exit(0);
}
}
}
[/code]
como sou iniciante em java, qualquer ajuda para melhorar o código também é bem vinda