[Resolvido] Ajuda com JasperReports / Problemas durante a geração do relatorio

2 respostas
A

Ola pessoal , mais uma vez eu venho pedir a ajuda da galera mais experiente.
Meu problema é o seguinte :

Eu nunca mexi com ireport nem jasper reports ,e minha namorada pediu pra eu fazer uma aplicaçãozinha pra ela e agora estou com problemas. A aplicação consiste em ler uma planilha do excel ( estou fazendo isso utilizando Jakarta POI ) e gerar um relatorio para cada linha.O relatorio deveria ser exportado como PDF mas a principio eu quero fazer com que ao clicar nos dados de uma jtable seja carregado o relatorio correspondete em um Panel ou LayeredPane . A minha planilha só tem uma linha e 4 colunas . deixei assim para facilitar. O meu programa nao está me gerando nenhuma exception. porem tbm nao esta gerando o relatorio.

Eu estou lendo a planilha e montando um objeto Relatorio a partir dos dados da planilha, e salvando num banco de dados pra gerar o relatorio via jdbc ( Sei que tem como fazer isso direto da planilha, vou aproveitar e aprender dos dois jeitos :smiley: ).

No ireport quando entro na aba preview, o relatorio é mostrado corretamente utilizando os dados cadastrados no banco.

Segue meu codigo :

RecibosBean:

public class RecibosBean {
    
     public RecibosBean() {
    }
    
    String Nome;
    
    double valor;
    
    Date dataInicio;
    
    Date dataFim;
            
    Date dataAtual;     

    public String getNome() {
        return Nome;
    }

    public void setNome(String Nome) {
        this.Nome = Nome;
    }

    public double getValor() {
        return valor;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public Date getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    public Date getDataFim() {
        return dataFim;
    }

    public void setDataFim(Date dataFim) {
        this.dataFim = dataFim;
    }

    public Date getDataAtual() {
        return dataAtual;
    }

    public void setDataAtual(Date dataAtual) {
        this.dataAtual = dataAtual;
    }
    
}

Recibos:

static public List<RecibosBean> lerCelula(File planilha) {


        HSSFWorkbook wb;
        HSSFSheet sheet;
        List<RecibosBean> lista = new ArrayList<RecibosBean>();
        
        try {
            wb = new HSSFWorkbook(new FileInputStream(planilha));
            sheet = wb.getSheetAt(0);
            
            for (int i = 0; i <= sheet.getLastRowNum(); i++) {
                RecibosBean recibo = new RecibosBean();
                HSSFRow row = sheet.getRow(i);
                
                recibo.setNome(row.getCell(0).getStringCellValue());
                recibo.setValor(row.getCell(1).getNumericCellValue());
                
                java.util.Date datainicio = row.getCell(2).getDateCellValue();
                Date data = new java.sql.Date(datainicio.getTime());
                recibo.setDataInicio(data);
                
                java.util.Date datafim = row.getCell(3).getDateCellValue();
                Date data2 = new java.sql.Date(datafim.getTime());
                recibo.setDataFim(data2);
                
                java.util.Date dataatual = row.getCell(3).getDateCellValue();
                Date data3 = new java.sql.Date(dataatual.getTime());
                recibo.setDataAtual(data3);
                
                lista.add(recibo);
               
            }

            return lista;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

ReportUtils:

public class ReportUtils {
    
    public JRViewer openReport(Connection conexao) throws JRException{
        
        InputStream stream =getClass().getResourceAsStream("/report1.jasper");
        Map mapa = new HashMap();
        
        JasperPrint print = JasperFillManager.fillReport(stream, mapa,conexao);
        JRViewer view = new JRViewer(print);
        return view;
        
    } 
    
}

Evento disparado na view :

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        TableModel modelo = (TableModel) jTable1.getModel();
        JFileChooser x = new JFileChooser();
        x.setVisible(true);
        x.showOpenDialog(null);
        int op = 0;
        File file;

        if (op == JFileChooser.APPROVE_OPTION) {
            file = x.getSelectedFile();
            List<RecibosBean> lista = Recibos.lerCelula(file);
            Dao dao = new Dao();
            dao.adicionarLista(lista);
            modelo.addListaDepedido(lista);
            try {
                JRViewer view = new ReportUtils().openReport( new ConnectionFactory().getConnection());
                jLayeredPane3.add(view);
                jLayeredPane3.repaint();
                
            } catch (JRException ex) {
             ex.printStackTrace();
            }
            
        }
    }

Ps : uma duvida conceitual que tenho é se aquele HashMap de parametros é utilizado apenas caso seja necessario fazer alguma alteração na query do relatorio? No meu caso quando construi o relatorio no ireport utilizei uma query pra pegar os dados do banco. eu nao preciso fazer nenhuma modificação naquela query e nem colocar nenhum tipo de filtro. Logo aquele HashMap é desnecessario?

ps2 : a parte de leitura da planilha , gravar os dados no banco , e preencher a tabela estao funcionando. Oq estou com problemas é somente na geração do relatorio.

Muito Obrigado

Anderson =)

2 Respostas

A

Consegui fazer aparecer o relatorio.
o relatorio estava sendo criado corretamente. o Que estava incorreto era a exibição.

a chamanda do metodo:

JasperViewer.viewReport(); exibiu o relatorio gerado.

Minha duvida é como eu faço pra exibir esse relatorio num JPanel em vez de exibir no JasperViewer. Nao sei se isso é possivel.

obrigado

A

A quem interessar , resolvi o problema , só nao sei o motivo haha

Faltou setar o layout do JPanel.

JPanel.setLayout(new BorderLayout());

depois de setar o layout é so adicionar o JasperPrint no Panel.

Criado 21 de dezembro de 2012
Ultima resposta 22 de dez. de 2012
Respostas 2
Participantes 1