Beberapa hari terakhir ini, gw ditanyain terus tentang caranya connect java swing ke jasper report. Dan konyolnya, gw juga udah lupa caranya. Maklum, kebanyakan copy-paste jadi begini niy. Ya udh supaya inget dan gag lupa-lupa lagi, gw paste disini aja sourcenya.
Gw coba bikin report gembel sederhana dulu, yg ambil data nama dan alamat dari table “contoh” yang ada di database “test”. Pertama-tama kita bikin dulu table nya didatabase,
CREATE TABLE `contoh` ( `nama` varchar(30) NOT NULL DEFAULT '', `alamat` varchar(100) DEFAULT NULL, PRIMARY KEY (`nama`) )
Abis itu kita bikin file jrxml-nya, nanti file jrxml ini akan dicompile on-the-fly oleh compiler jadi .jasper.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Iseng" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<parameter name="nama1" class="java.lang.String"/>
<queryString>
<![CDATA[SELECT
contoh.`nama` AS contoh_nama,
contoh.`alamat` AS contoh_alamat
FROM
`contoh` contoh
where contoh.`nama` like $P{nama1}]]>
</queryString>
<field name="contoh_nama" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="contoh_alamat" class="java.lang.String">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="56" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="555" height="46"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="24"/>
</textElement>
<text><![CDATA[Testing Report]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band height="13" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="34" splitType="Stretch">
<staticText>
<reportElement x="0" y="11" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Nama]]></text>
</staticText>
<staticText>
<reportElement x="132" y="11" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Alamat]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="27" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{contoh_nama}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="132" y="0" width="100" height="20"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<textFieldExpression class="java.lang.String"><![CDATA[$F{contoh_alamat}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
</jasperReport>
Di situ gw bikin satu report yang akan mencari data di table contoh berdasarkan query nama. Perhatikan line 10, itu adalah variabel yang akan gw gunakan untuk menjadi variabel query report.
Setelah jadi reportnya, sekarang gw lanjut bikin tampilannya. Gw pakek java Swing buat bikin UI. Jadi harap maklum klo rada kacrut sederhana.
package com.edw.frame;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;
import org.apache.log4j.Logger;
/**
*
* @author edw
*/
public class FrameMain extends JFrame implements ActionListener {
private Logger logger = Logger.getLogger(FrameMain.class);
private JTextField txtNama = new JTextField(20);
private JButton cmdPrint = new JButton("cetak");
public FrameMain() {
init();
}
private void init() {
Container conn = getContentPane();
conn.setLayout(new FlowLayout());
conn.add(new JLabel("Iseng"));
conn.add(txtNama);
conn.add(cmdPrint);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cmdPrint.addActionListener(this);
pack();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == cmdPrint) {
try {
// parameter
String parameterNama = txtNama.getText();
//load report location
FileInputStream fis = new FileInputStream("src\\com\\edw\\rpt\\Iseng.jrxml");
BufferedInputStream bufferedInputStream = new BufferedInputStream(fis);
//set parameters
Map<String, String> map = new HashMap<String, String>();
map.put("nama1", parameterNama);
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "xxxx");
//compile report
JasperReport jasperReport = (JasperReport) JasperCompileManager.compileReport(bufferedInputStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, connection);
//close connection
connection.close();
//view report to UI
JasperViewer.viewReport(jasperPrint, false);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}
public static void main(String[] args) {
new FrameMain().setVisible(true);
}
}
Coba cek di line 64, itu adalah parameter yang akan dikirim ke report, pastikan nama variabelnya sama dengan nama variabel yang ada di jasper report ( file jrxml ). Sedangkan line 67 adalah Koneksi database gw, silahkan di modifikasi sesuai keinginan.
Nanti klo udh dijalanin, jadinya kayak gini

terus klo misalkan text field nya diisi dengan “edwin” dan kemudian menekan tombol “cetak”, maka akan muncul form report dengan data “edwin” yang kita cari.

berikut adalah struktur project gw serta library (jar) apa aja yg gw pake.

harap diingat, lokasi jar yg gw pake ada di dalam folder instalasi Jasper Report, silahkan di search aja.
nah ini adalah isi database gw, coba di cek output dari jasper dan isi databasenya, sinkron apa engga.

Sekian dan terima kasih.
nb. Oh iya, hasil preview dari jasper report juga bisa di save as ke berbagai macam format, tinggal di save aja.

makasih y mas bwt postingan’y..
bnr” membantu..
🙂
terima kasih kembali. 🙂
Mas, saya sudah ikutin langkah2 nya tapi ada error
“The Document has no pages”
Salah dimana nya ya? 🙁
Terima Kasih (Y)
Hi Fandi,
itu karena datanya engga ada kali, coba di tes print langsung di iReport-nya
Mungkin databasenya belum dipilih atau diganti dengan database “test” yang telah kita buat diatas.
Coba :
1. Pada toolbar pilih Report Datasources
2. New
3. Pada Select the datasouces type pilih Database JDBC connection
4. Pada Name masukkan namanya, JDBC Driver diganti MySQL (com.mysql.jdbc.Driver), JDBC URLnya diganti jdbc:mysql://localhost/Test, maksudnya Test adalah nama database yang kita gunakan.
Pada username kita isi username MySQL kita, defaultnya root, masukkan Password jika ada password, defaultnya kosong
5. Tekan test untuk ngetes apakah koneksi ke databasenya sukses atau gagal, jika gagal coba cek pada langkah ke 4, jika sukses tekan Save
6. Tekan tombol Close pada kotak dialog Connections / Datasources
7. Coba di Preview, ntar akan muncul kotak dialog untuk masukkin nama yang dicari, lalu tekan aja OK
8. Selesai, semoga membantu
Thanks Infonya gan 😀
Mas, mau tanya, gunanya import :
import org.apache.log4j.Logger;
itu apa ?
library yang dipakai itu yg mana ?
makasih sebelumnya
Hi Michael,
itu Log4J dipake buat bikin logging aplikasi.
Thankyou