************* 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]
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 :
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.
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 :
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 ?
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…
[code]public class Cliente {
private int codigo;
private String nome;
private int idade;
// gets e sets pra eles
}[/code]
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
[code]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 );
}[/code]
e no seu report tu vai colocar os nomes nos field, dos atributos do seu cliente, como…
codigo, nome e idade, certo ?
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);
tente assim:
[code]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);
[/code]
BLZ ?
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