Bom pessoal tenho uma Jtable com dados e gostaria de passar esses dados para o IReport alguém tem alguma idéia?
[RESOLVIDO]IReport
33 Respostas
Pode criar um objeto, popular ele com os dados da JTable e enviar uma JCollection para o iReport
Bah vlw pela dica mas tu sabe me dizer como posso fazer isso nunca trabalhei com Ireport???
O meu problema é como criar um campo dentro do Jasper (o tipo dele).
Desde já agradeço pela sua atenção.
Tem vários tutoriais aqui no fórum na sessão tutorial …
E também nos tópicos da galera… Estou bem ocupado, mas se pintar algum erro
eu tento ajuda-lo
Bom eu entendi o que você me propôs mas como trabalho com o JCollection que tido de dado ele é?
Valeu pelos esclarecimentos
Collection são ArrayList<> com as informações dos teus objetos.
Pode ser qualquer coisa.
Exemplo:
ArrayList<Funcionario> listaFuncionario;
onde este contem TUDO de funcionario
Ah blz entao era mais ou menos isso que eu precisava vou testar aqui depois te do um toque.
Oh meu amigo quis são as biblioteca necessárias para eu usar este recurso do IReport
as mesmas para qualquer relatório que for fazer…
Já postei em vários tópicos aqui do GUJ elas…
não lembro de cabeça, mas se procurar aki vai encontrar certinho 
Eu coloquei as bibliotecas necessarias porem me apresenta esse erro
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: net/sf/ja
sperreports/engine/JRException
at br.com.nautec.flowtracklite.Application.startup(Application.java:71)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: net.sf.jasperreports.engine.JRExcep
tion
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 10 more
ERROR [Prototyper] (Prototyper.java:105) - Prototype
org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another
process". Possible solutions: close all other connection(s); use the server mod
e; SQL statement:
null/129a7e4f160618e71edff7525b8dd3aff62b356e8a8 [90020-137]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:327)
at org.h2.message.DbException.get(DbException.java:167)
at org.h2.message.DbException.get(DbException.java:144)
at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:436)
at org.h2.store.FileLock.lockFile(FileLock.java:331)
at org.h2.store.FileLock.lock(FileLock.java:129)
at org.h2.engine.Database.open(Database.java:523)
at org.h2.engine.Database.openDatabase(Database.java:207)
at org.h2.engine.Database.<init>(Database.java:202)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:146)
at org.h2.engine.Engine.getSession(Engine.java:125)
at org.h2.engine.Session.createSession(Session.java:119)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.jav
a:239)
at org.h2.engine.SessionRemote.createSession(SessionRemote.java:217)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:111)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:95)
at org.h2.Driver.connect(Driver.java:58)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(D
efaultConnectionBuilder.java:39)
at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java
:159)
at org.logicalcobwebs.proxool.Prototyper.sweep(Prototyper.java:102)
at org.logicalcobwebs.proxool.PrototyperThread.run(PrototyperThread.java
:44)
Tem alguma idéia do que pode ser
Valeu pela atenção.
org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another
process". Possible solutions: close all other connection(s); use the server mod
e;
Provavelmente vc colocou conexao ao banco de dados no Relatório, e esta abrindo a conexao na Aplicação também.
A mensagem diz o Database já esta em uso, ou Fechado por outro processo.
Daew cara o seguinte eu primeiramente estou fazendo um simples exemplo com o ireport sem consulta ao banco sem nada sendo assim se conseguir passar os parametros corretamente depois faço com que o meu relatório receba um colection.
Como eu fiz
1º Gerei um jasper com os os parametros $P{DATAHORA},$P{VOLUME},$P{DESCRICAO},$P{PORTA};
E em seguida na minha aplicação fiz o seguinte código
@Action void Gerar(){
try {
Map parametros = new HashMap();
parametros.put("DATAHORA", 1);
parametros.put("VOLUME", 2);
parametros.put("DESCRICAO", 3);
parametros.put("PORTA", 4);
InputStream is = this.getClass().getClassLoader().getResourceAsStream("report2.jasper"); //pega o .jasper (em resumo).
JasperPrint jp = JasperFillManager.fillReport(is, parametros); //como havia falado, recebe os parâmetros, e o InputStream.
JasperViewer viewer = new JasperViewer(jp); //recebe um JasperPrint como parâmetro.
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
viewer.setVisible(true);
} catch (JRException ex) {
Logger.getLogger(ApplicationView.class.getName()).log(Level.SEVERE, null, ex);
}
}
Isso está certo???
Coloquei na minha aplicação e ele gerou o seguinte erro
Caused by: java.lang.IllegalAccessException: Class org.jdesktop.application.Appl
icationAction can not access a member of class br.com.nautec.flowtracklite.view.
ApplicationView with modifiers ""
OBrigado mesmo pela ajuda
InputStream caminhoJasper = getClass().getResourceAsStream(
"report2.jasper");
ArrayList<String> numPaginas = new ArrayList<String>();
numPaginas.add("");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
numPaginas);
try {
JasperPrint jp = JasperFillManager
.fillReport(caminhoJasper, hm, ds);
JasperViewer.viewReport(jp, false);
} catch (JRException e) {
e.printStackTrace();
}
PS.: hm é o seu parametros
Tenta isso, já deu uma pesquisada no Fórum como mensionei?
De boa, tem muito material de como começar a utilizar o iReport… é bom dar uma estudada no material do Fórum…
Valeu
Valeu mesmo testo aqui vejo os resultados
Quanto as pesquisa continuarei pesquisando (estou desde ontem dazendo isso)
Inclusive vi vários posts teus por isso continuo a te perguntar pois pelo que vi voce domina essa ferramenta
Valeu pela ajuda
Bom já estou conseguindo passar os parametros porem não estou conseguindo fazer com que os registros aparecem dentro do ireport vocÊ tem alguma idéia do que pode ser isso???
Não sei dizer…
Pode ser várias coisas…
Verificou se realmente esta passando alguma informação para o relatório ???
Ele nãp apresentou nenhum tipo de erro
Além de antes disso ele me detectar erro de tipo de variável.
Assim que eu corrigi ele veio a funcionar porem não mostra nada nos relatórios vlw pela ajuda
E no java? Coloque alguns System.out.print, nos teus objetos. e verifique se estão preenchidos
Cara seguinte as informações aparecem no View do Ireport porém quando as chamo não aparece nada tem alguma do que pode ser?
vc colocou sql no Query do relatório?
então não sei, eu não faço isso. Particularmente NAO GOSTO…
De uma pesquisada aqui no fórum, tem alguns usuarios que fazem assim
e talvez possam te ajudar
Cara seguinte já está funcionando certinho agora falta o mais simples
Fazer o JCollection,
Dúvidas:
1º No meu IREPORT o campo que irá receber os dados ele será collection ou String?
2º Irei passar um JRCollection e como ele passará para o próximo registro?
Valeu pela ajuda
no Ireport vai ser apenas Fields, do tipo que vc colocar na Collection.
Imagine Funcionario:
String nome;
int idade;
…
no collection:
nome = pedro;
idade = 18;
no iReport;
$F{nome}
$F{idade}
Seguinte cara conseguir passar um colecction so que o problema mora na apresentaocao pois tenho dentro do meu
Jtable o seguinte
/////////////////////////////////
//pulso//address/port//vol//
//1 //1 /1 /1 ///
//2 //2 /2 /2///
//3 //3 /3 /3///
//4 //4 /4 /4///
//////////////////////////////
E no meu Ireport apresenta da seguinte maneira
/////////////////////////////////////////////
//pulso//address/port//vol//////////////
//1,2,3,4 //1,2,3,4/1,2,3,4 /1,2,3,4 ///
///////////////////////////////////////////
Valeu pela dica e pela compreensão.
E como ta seu relatorio?
Esta assim ele colocou tudo na mesma linha
/////////////////////////////////////////////
//pulso//address/port//vol//////////////
//1,2,3,4 //1,2,3,4/1,2,3,4 /1,2,3,4 ///
///////////////////////////////////////////
Valeu pela compreensao
Eu perguntei como está montado seu relatório,
e não como saiu o resultado…
esta:
$F{pulso} $F{address} $F{port} $F{vol}
??
É esta assim mesmo
entao é a sua collection que tá errada
@Action
public void Gerar() throws JRException {
JasperPrint jp = null;
TableModel model = new ReportTableModel();
JRTableModelDataSource ds = new JRTableModelDataSource(model);
//JasperFillManager.fillReport(report, map, ds);
Map parametros = new HashMap();
Map registro = new HashMap();
System.out.println("this.reportTable.getRowCount() = " + this.reportTable.getRowCount());
for (int j = 0; j < this.reportTable.getRowCount(); j++) {
String date = this.reportTable.getValueAt(j, 0).toString();
System.out.println("dt = " + date);
String vol = this.reportTable.getValueAt(j, 1).toString();
System.out.println("vol = " + vol);
String desc = this.reportTable.getValueAt(j, 2).toString();
System.out.println("desc = " + desc);
String port = this.reportTable.getValueAt(j, 3).toString();
System.out.println("port = " + port);
registro.put("data", date);
registro.put("desc", desc);
registro.put("vol", vol);
registro.put("port", port);
parametros.putAll(registro);
}
System.out.println("parametros.size() = " + parametros.size());
try {
jp = JasperFillManager.fillReport("report4.jasper", parametros, ds);
JasperViewer.viewReport(jp, false);
} catch (JRException e) {
e.printStackTrace();
}
}
Sendo que no meu ireport todos os campos estao como Strings porem desse jeito ele só retorna o último registro da minha tabela.(apenas um linha),porém minha JTable tem 23
Valeu
Estou tentando de duas formas uma delas é a seguinte@Action public void Gerar() throws JRException { JasperPrint jp = null; TableModel model = new ReportTableModel(); JRTableModelDataSource ds = new JRTableModelDataSource(model); //JasperFillManager.fillReport(report, map, ds); Map parametros = new HashMap(); Map registro = new HashMap(); System.out.println("this.reportTable.getRowCount() = " + this.reportTable.getRowCount()); for (int j = 0; j < this.reportTable.getRowCount(); j++) { String date = this.reportTable.getValueAt(j, 0).toString(); System.out.println("dt = " + date); String vol = this.reportTable.getValueAt(j, 1).toString(); System.out.println("vol = " + vol); String desc = this.reportTable.getValueAt(j, 2).toString(); System.out.println("desc = " + desc); String port = this.reportTable.getValueAt(j, 3).toString(); System.out.println("port = " + port); registro.put("data", date); registro.put("desc", desc); registro.put("vol", vol); registro.put("port", port); parametros.putAll(registro); } System.out.println("parametros.size() = " + parametros.size()); try { jp = JasperFillManager.fillReport("report4.jasper", parametros, ds); JasperViewer.viewReport(jp, false); } catch (JRException e) { e.printStackTrace(); } }Sendo que no meu ireport todos os campos estao como Strings porem desse jeito ele só retorna o último registro da minha tabela.(apenas um linha),porém minha JTable tem 23
Valeu
Cade o New HashMap dentro do for?
vc ta sobrescrevendo o conteudo da mesma linha Sempre.
por isto retorna sempre a ultima linha.
Amigo.. tente dar uma analisada com seus System.out.Printlns...
Vai evitar bastante coisas deste genero, vou trabalhar..
Tenho bastante serviço para fazer.
Att. Jonas
Funcionou a solução está em http://www.guj.com.br/posts/list/211879.java#1078058
é isso ai.
Caro TheKill acabei esquecendo de te agradecer valeu mesmo pela ajuda.
ABração
relaxa. ta de boa…
parabens 