Colocar dados de uma array no report

8 respostas
L
************* Javabeans 1 ****************** 

public class Livro {
   
   private String nome; 
   private ArrayList debitos;

  
   public Livro(){
      
   }
   
   public Livro(String nome, ArrayList debitos) {
      super();
                this.nome = nome;
                this.debitos = debitos;

   }
   

        // metodos gets e sets 
   public String getNome() {
      return nome;
   }
        public void setNome(String nome) {
      this.nome = nome;
   }
      public String getDebitos() {
      return debitos;
   }
        public void setDebitos(String debitos) {
      this.debitos = debitos;
   }

}
************* Javabeans 2 ******************
       
// Crio o primeiro Array e adiciono todos os valores da primeira coluna da minha tabela. e depois imprimo. O ARRAY FUNCIONA LEGAL PORQUE IMPRIME TODOS OS VALORES DA PRIMEIRA COLUNA DA TABELA.

ArrayList debitos = new ArrayList(); 
            int j = jtable.getRowCount();
            int h = 0;
            int n = 0;
            while(h < j){
              debitos.add(jtable.getValueAt(n, 0));
              n++;
              h++;
             
            }
            System.out.println(debitos);

// Crio um segundo Array para alimentar os objectos da class anterior
  
       ArrayList listaLivros = new ArrayList();   
       Livro livro = new Livro();
       livro.setnome( "Java How to programa !");

       livro.setdebito(debitos); // ESTOU A ADICIONAR O 1º ARRAY CRIADO AO OBJECTO Livro PARA ALIMENTAR O ARRAYLIST debito.

       listaLivros.add(livro);
       
                     
       JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaLivros);    
       JasperReport relatorio = JasperCompileManager.compileReport("Relatórios/Extracto.jrxml");
       Map parametros = new HashMap();
           JasperPrint impressao = JasperFillManager.fillReport(relatorio, parametros, ds); 
           JasperViewer view = new JasperViewer(impressao, true);
           view.setVisible(true);
           view.show();
           }catch(Exception e){e.printStackTrace();}
                
            }
                            
          };

************* ireport ******************

no ireport eu criei o campos de texto $F{nome} e $F{debito}

Pessoal ta ma dar o segunite erro :

java.lang.ClassCastException: java.util.ArrayList.
NESTED BY :
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : 
        Source text : $F{debito}

Quando eu retiro o campo $F{debito} do report ele abre o report bem legal .

qual pode ser o problema ?
No ireport como devo referenciar um arrayList ? da mesma forma que referencio uma String dentro de um array?

Qual a melhor forma de colocar um ArrayList no ireport ?
Por favor vejam com atenção o codigo. o erro esta no 1ºarray list que eu criei e que estou tentando colocar no report . O arraylist que contem o os objectos da class Livro funciona bem .
O problema é o 1º ArrayList.
Quero saber como posso colocar este dados que estao dentro do array no report.

POr Favor alguem me ajude
[/code]

8 Respostas

C

tp… eu costumo trabalhar com subReports no iReport, tp… vamos supor q vc tem 2 collections pra mandar pra o seu Relatorio, entao vc cria 2 subrelatorios, ai la vc tem o parametro de Object ne: vc marca essa opcao, ai no seu subrelatorio, vc trabalhar com os campos q vao vir dessa collection, entendeu :

L

Da para vc detalhar um pouquinho mais ! assim me ajuda bastante!
o meu 1º array é alimentado por dados de uma tabela ( objects ) e muitas vezes ( conforme o cliente ) a tabela tem mais ou menos quantidade dados (rows).

POrtanto essa collection nao tem campos !

Deu pa entender ? o meu problema é ! se a minha collection nao tem campos como é que eu coloco os dados que estao dentro dela no report ?

Se tivesse campos era facil, eu criava campos no irepot com o mesmo nome que os que tao dentro da collection. mas no caso de eu nao ter campos, como é que fica ?

Acho que tem que haver uma meneira para jagar estes dados que estao numa collection alimentada por uma tabela em swing para dentro do ireport.

C

kra, vc ta entrando em contradicao no que vc ta dizendo…

tp… como vc quer fazer um relatorio passando dados dessa collection c essa colection n tem dados :
Vc vai fazer relatorio de dados c vc n tem dados pra mandar pra esse relatorio!

como vc coloca os dados na sua tabela : e atraves de uma collection q tem objetos nela ne: entao…

com esses mesmos objetos tu passa pra o relatorio! e isso :

L

Eu vou tentar explicar melhor :

Eu quero colocar no ireport na zona detail os dados que estao dentro de um array list. Eu criei o array da seguinte forma :

ArrayList debitos = new ArrayList(); 
            int j = jtable.getRowCount(); 
            int h = 0; 
            int n = 0;
            // VAI FAZER O LOOP PARA APANHAR TODOS OS DADOS DA PRIMEIRA COLUNA DA TABELA 
            while(h < j){ 
              debitos.add(jtable.getValueAt(n, 0)); 
              n++; 
              h++; 
              
            } 
            System.out.println(debitos); // IMRIME OS DADOS QUE ESTÃO DENTRO DO ARRAY. IMPRIMIU ASSIM : [ 120,000 ; 200,000 ; 50,000 ; 10,000 , 120,000 ]

o codigo para o Datasource será :

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(debitos);

A minha grande pergunta é : E no ireport o que é que eu coloco ? um textfield com a referenca do arraylist “debitos”? senao, que referencia eu boto la para ele receber os dados ?

C

Ola.. vejamos...

Vamos supor q tu ta mostrano na sua table todos os clientes cadastrados no seu bd certo ?
Entao tu tem uma classe cliente..

public class Cliente {
   private int codigo;
   private String nome;
   private int idade;

   // gets e sets pra eles
}

ai tu monta a sua table com vamos supor uma consulta sql vinda do seu bd certo?

entao tu vai ter assim

!rs.next()!
!Cliente1 !
!Cliente2 !
!Cliente3 !

e sua tabela tera 3 linhas certo ?

entao agora tu vai recuperar os dados no seu objeto, vc instancia o objeto, seta os valores nele assim sim tu add o OBJETO no ArrayList

ArrayList list = new ArrayList();

while( seuCodigo ) {
   Cliente cliente = new Cliente();
   cliente.setCodigo( lugarOnde esta o codigo na table );
   cliente.setNome( lugarOnde esta o nome na table );

   // agora tu add o objeto cliente no list
   list.add( cliente );
}

e no seu report tu vai colocar os nomes nos field, dos atributos do seu cliente, como...

codigo, nome e idade, certo ?

L

Acho que agora estou quase, mas sabe o que ta me acontecendo .

o valor que ele coloca no report é sempre o ultimo, o que me parece que ele nao esta guardando os outros que vieram primeiro. ouseja ele set um mas depois faz o loop apaga o que estava e seta o a seguir ate acabar o look e o ultimo valor é o que ele mostra . quer dizer todas as linhas tem os mesmos dados.o que é que pode estar mal eu tenho o loop assim :

int j = jtable.getRowCount(); // da-me o numeros de rows da jtable
int h = 0;
int n =0;
ArrayList ListaLivros = new ArrayList();

while(h < j ){
String t (String) jtable.getValueAt(n, 0);
String t1 (String) jtable.getValueAt(n, 1);
String t2 (String) jtable.getValueAt(n, 2);

livro.setdebito(t);
livro.setcredito(t1);
livro.setmov(t2);

ListaLivros.add(livro);
C

tente assim:

int j = jtable.getRowCount(); // da-me o numeros de rows da jtable
int h = 0;
int n =0;
ArrayList ListaLivros = new ArrayList();

while(h < j ){
   Livro livro = new Livro(); // Vc esqueceu d instanciar um novo objeto

   livro.setdebito( jtable.getValueAt(n, 0).toString());
   livro.setcredito(jtable.getValueAt(n, 1).toString());
   livro.setmov(jtable.getValueAt(n, 2).toString());

   ListaLivros.add(livro);

BLZ ?

L

Valeu… agora ta funcionando beleza. muito obrigado so faltava mesmo isso ai que voce disse.

Me diz uma coisa como é que eu coloco cores em cada uma das linha ?

queria colocar um efeito “Zebrado” no meu reporte aonde uma linha era branca e a outra azul, para os dados que vem da aplicação. voce sabe como eu coloco isso ?

Muito obrigado

Criado 14 de maio de 2006
Ultima resposta 18 de mai. de 2006
Respostas 8
Participantes 2