Relatório em tempo de execução - iReport [RESOLVIDO]

Olá galera!
Tô querendo implementar um relatório, mas não tenho idéia de como fazê-lo.
É o seguinte:
Tenho um JFrame que tem os itens de um pedido contidos em um JTable e o código deste pedido contido em um JTextField, gostaria de passar para o relatório no iReport este código e para um sub relatório os itens que estão na JTable.

OBS: Uso o iReport 3.5.2 e o NetBeans 6.5

O que devo fazer na aplicação e no iReport???

Agradeço a ajuda!
T+

Boa tarde

Então, tem uma apostila bem legal de jasper nesse site http://www.integrator.com.br entre e faça o seu cadastro, no setor de downloads tem duas apostilas que fala sobre como desenvolver relatórios com ireport, e também explica como fazer sua aplicação java (web ou desktop) chamar o relatorio feito em jasper.

Falou.

Olá, fredsilva.sistemas!!
Bom cara, se eu entendi bem o que vc precisa não vejo o porque de utilizar um subrelatorio, sendo que vc pode passar os dados sobre o pedido como parametros e a lista de itens em um List setando ele no relatorio atraves do JRBeanCollectionDataSource.

Segue um link onde tem um tutorial muito bom sobre como utilizar o JrBeanCollectionDataSource e mais dicas sobre ireport!

http://www.furutani.com.br/2009/02/usando-o-jrbeancollectiondatasource/

[]'s

[quote=thiagocg]Olá, fredsilva.sistemas!!
Bom cara, se eu entendi bem o que vc precisa não vejo o porque de utilizar um subrelatorio, sendo que vc pode passar os dados sobre o pedido como parametros e a lista de itens em um List setando ele no relatorio atraves do JRBeanCollectionDataSource.

Segue um link onde tem um tutorial muito bom sobre como utilizar o JrBeanCollectionDataSource e mais dicas sobre ireport!

http://www.furutani.com.br/2009/02/usando-o-jrbeancollectiondatasource/

[]'s[/quote]

Tô testando o exemplo do tutorial, mas tá dando o seguinte erro:

xception in thread “main” java.lang.NullPointerException
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.(ObjectInputStream.java:280)
at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:57)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:197)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:607)
at admin.model.Inicio.exibirRelatorio(Inicio.java:39)
at admin.model.Inicio.main(Inicio.java:91)
Java Result: 1

O código da Classe:

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.view.JasperViewer;

public class Inicio {

    public void exibirRelatorio() {
        // Caminho do .jasper do relatorio
        String caminhoRelJasper = "Livros.jasper";

        // Lista com beans
        List listaLivros = getLivros();

        // Stream com o .jasper
        InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);
        
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaLivros);

        // Parametros do relatorios
        Map parametros = new HashMap();

        JasperPrint impressao = null;
        try {
            impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
            JasperViewer viewer = new JasperViewer(impressao, true);
            viewer.setVisible(true);

        } catch (JRException e) {
            System.out.println(e.getMessage());
        }

    }

    public List getLivros() {
        List listaLivros = new ArrayList();
        Livro livro = new Livro();

        livro.setTitulo("Use a cabeça! Padrões de Projeto ? Design Patterns");
        livro.setAutor("Freeman, Eric / Freeman, Elisabeth");
        livro.setIsbn("8576080869");
        livro.setEditora("Alta Books");
        livro
                .setDescricao("Como você sabe que não quer reinventar a roda (ou, "
                        + "pior, um pneu furado), "
                        + "então você busca padrões de projetos");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Entendendo e Dominando o Linux");
        livro.setAutor("Morimoto, Carlos");
        livro.setIsbn("8589535339");
        livro.setEditora("Digerati");
        livro
                .setDescricao("Como o nome diz, este livro é uma obra destinada a "
                        + "todos aqueles que "
                        + "pretendem conhecer na prática e em detalhes os "
                        + "principais recursos oferecidos pelo Linux");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Guia de Certificação em Java ? Exame CX-310-035");
        livro.setAutor("Pereira, Rafael");
        livro.setIsbn("8573934263");
        livro.setEditora("Ciência Moderna");
        livro.setDescricao("Este Guia de Certificação em Java é um livro "
                + "fundamental para preparar os"
                + " candidatos ao exame de programador Java da Sun, "
                + "a primeira e mais "
                + "requisitada certificação desta tecnologia.");
        listaLivros.add(livro);

        return listaLivros;
    }

    public static void main(String[] args) {
        new Inicio().exibirRelatorio();
    }
}

Alguém sabe o que está errado?
T+

Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?

[quote=thiagocg]Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?[/quote]

Valeu thiagocg!
Vou acetar isso aqui e depois posto o resultado.
T+

[quote=thiagocg]Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?[/quote]

E thiagocg, coloquei o relatório dentro do projeto e ainda assim não deu certo!
Acho que pode ser alguma coisa quanto aos parâmetros do iReport, pois eu adicionei os TextFields, mas não entendi como ele vai comunicar com a minha aplicação! :frowning:

Se alguém tiver alguma idéia! Eu tô precisando disso para finalizar o meu sistema aqui!
Obrigado a todos!
T+

Ola fre!!!

de uma olhada nesse tutorial. Pode lhe ajudar:

http://www.guj.com.br/article.show.logic?id=151

espero q ajude

[]'s

Olá Galera!
Neste tutorial que o Wesley Marra passou tem um exemplo bem fácil de fazer passando como parâmetro um ResultSet.
Por enquanto ele resolve o meu problema, mas se alguém tiver formas melhores de fazer. Posta aí!
Mais uma vez agradeço a todos pela ajuda!
T+

[quote=thiagocg]Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?[/quote]

Consegui resolver aqui Thiago! Ele não conseguia achar o relatório porque estava com problema nas seguites linhas:

impressao = JasperFillManager.fillReport(relJasper, parametros, ds);   
JasperViewer viewer = new JasperViewer(impressao, true);   

então eu substitui por:

String jasperPrint = JasperFillManager.fillReportToFile( "Livros.jasper", parametros, ds );
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);

E acrescentei:

viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);

Ficando assim:

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.view.JasperViewer;

public class Inicio {

    public void exibirRelatorio() {
        // Caminho do .jasper do relatorio
        String caminhoRelJasper = "Livros.jasper";

        // Lista com beans
        List listaLivros = getLivros();

        // Stream com o .jasper
        InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);
        
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaLivros);

        // Parametros do relatorios
        Map parametros = new HashMap();

        JasperPrint impressao = null;
        try {

            String jasperPrint = JasperFillManager.fillReportToFile( "Livros.jasper", parametros, ds );
            JasperViewer viewer = new JasperViewer(jasperPrint, false, false);// O segundo false serve para que a janela do relatório fique: DISPOSE_ON_CLOSE
            viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
            viewer.setVisible(true);

        } catch (JRException e) {
            System.out.println(e.getMessage());
        }

    }

    public List getLivros() {
        List listaLivros = new ArrayList();
        Livro livro = new Livro();

        livro.setTitulo("Use a cabeça! Padrões de Projeto ? Design Patterns");
        livro.setAutor("Freeman, Eric / Freeman, Elisabeth");
        livro.setIsbn("8576080869");
        livro.setEditora("Alta Books");
        livro
                .setDescricao("Como você sabe que não quer reinventar a roda (ou, "
                        + "pior, um pneu furado), "
                        + "então você busca padrões de projetos");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Entendendo e Dominando o Linux");
        livro.setAutor("Morimoto, Carlos");
        livro.setIsbn("8589535339");
        livro.setEditora("Digerati");
        livro
                .setDescricao("Como o nome diz, este livro é uma obra destinada a "
                        + "todos aqueles que "
                        + "pretendem conhecer na prática e em detalhes os "
                        + "principais recursos oferecidos pelo Linux");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Guia de Certificação em Java ? Exame CX-310-035");
        livro.setAutor("Pereira, Rafael");
        livro.setIsbn("8573934263");
        livro.setEditora("Ciência Moderna");
        livro.setDescricao("Este Guia de Certificação em Java é um livro "
                + "fundamental para preparar os"
                + " candidatos ao exame de programador Java da Sun, "
                + "a primeira e mais "
                + "requisitada certificação desta tecnologia.");
        listaLivros.add(livro);

        return listaLivros;
    }

    public static void main(String[] args) {
        new Inicio().exibirRelatorio();
    }
}

Valeu pela força!
T+