Pembuatan Laporan dengan IReport

iReport adalah merupakan perangkat lunak bantu untuk perancangan laporan secara visual yang nantinya dapat di kompilasi dengan menggunakan JasperReport sehingga menjadi file *.jasper atau *.jrxml yang dapat langsung dipanggil oleh program Java.

Komponen-komponen iReport :

1. Koneksi Database / Datasource

Sebelum kita memulai mendesain sebuah report dalam iReport, terlebih dahulu langkah yang kita harus lakukan adalah kita harus melakukan koneksi ke database. Dalam hal ini kita akan membuat koneksi database dengan menggunakan JDBC Connection.

Langkah-langkahnya adalah:

      Pilih Data -> Connection/Datasource, Klik new, akan muncul wizard. Pilih “Database JDBC Connection”. Kemudian akan muncul form Connections properties. Kemudian Name diisi dengan nama Koneksi. JDBC Driver diisi dengan kelas driver yang akan digunakan. Misal kita akan menggunakan Database PostgreSQL, sehingga driver classnya diisi dengan “org.postgresql.driver”. JDBC URL diisi dengan url dari database yang akan digunakan. Misal kita akan menggunakan Database PostgreSQL dengan dijalankan di localhost dan nama databasenya namadatabase, maka penulisan urlnya menjadi “jdbc:postgresql://localhost/namadatabase”. User Name dan Password diisi dengan username dan password untuk login ke dalam database yang digunakan. Kemudian klik save untuk menyimpan koneksi atau klik test untuk mengecek apakah konfigurasi telah sesuai.

2. Query Database

Langkah selanjutnya setelah kita berhasil membuat koneksi ke database di iReport, selanjutnya kita perlu membuat query yang digunakan untuk menampilkan data yang ingin kita tampilkan. 

- pilih data -> report query
      - Kemudian isikan Query database pada text area yang berada di tengah form
      - Setelah Query diisikan kemudian akan muncul field-field dari hasil query tersebut.
      Field-field tersebut berada dalam tabel yang berada di bagian bawah form.
Sekarang kita telah mendapatkan field-field dari database, yang nantinya akan digunakan untuk keperluan desain report.

Dalam iReport ada 3 komponen utama yang digunakan untuk menampung data yaitu Field, Variable dan Parameter.

3. Field

Field digunakan untuk menampung data hasil dari query database. Seperti contoh diatas ada 3 buah field yaitu ID, NAMA_ASISTEN dan STATUS.

4. Variables

Variables digunakan untuk menampung data yang akan digunakan di dalam report. pada iRepot telah tersedia beberapa variables build in antara lain PAGE_NUMBER, COLUMN_NUMBER, REPORT_COUNT, PAGE_COUNT, COLUMN_COUNT. kita juga bisa mendefinisikan variables custom dengan cara klik kanan node variables pada document structure pilih add -> variables.

5. Parameters

Parameters digunakan untuk masukan atau melewatkan data dari kode Java ke dalam report. iReport juga telah menyediakan beberapa parameters build in dan kita juga bisa menambahkan parameters sesuai dengan yang kita butuhkan. dengan cara klik kanan node parameters pada document structure pilih add -> parameters.

6. Design

Setelah kita melewati beberapa langkah diatas, kita telah siap untuk mendesain report. untuk mendesainnya kita cukup melakukan Drag and Drop saja, komponen-komponen yang kita butuhkan ke dalam bidang desain.

Pada bidang desain terbagi menjadi 9 bidang desain yaitu title, pageHeader, columnHeader, detail, columnFooter, pageFooter, lastPageFooter, summary dan Background. Ke sembilan bidang desain itu, kita dapat mengatur ukurannya sesuai dengan kehendak kita dan bahkan juga dapat kita hilangkan. Untuk mengaturnya klik kanan bidang desain kemudian pilih band properties.

Penjelasan mengenai 9 bidang desain dibawah ini: 

      Background

Background disini dapat diisi dengan gambar maupun text, yang nantinya akan menjadi background pada setiap halaman dalam report. 
title
title akan dicetak sekali pada bagian paling atas report. title ini dapat diisi dengan judul report atau kop report.  
pageHeader
pageHeader akan dicetak pada bagian atas di setiap report. 
columnHeader
columnHeader akan dicetak pada bagian atas tabel / kolom pada report. biasanya digunakan untuk nama kolom.  
detail
detail adalah isi dari report itu sendiri. Biasanya komponen yang berada pada detail ini adalah field yang nantinya akan dicetak sebanyak data dari hasil query database. columnFooter
penjelasannya sama dengan columnHeader, hanya saja dicetak di bagian bawah. 
pageFooter
penjelasannya sama dengan pageHeader, hanya saja dicetak pada bagian bawah. 
lastPageFooter
lastPageFooter akan dicetak sekali pada bagian bawah halaman report paling belakang - summary

summary akan dicetak pada halaman paling belakang dari report. biasanya diisi dengan grafik atau keterangan umum dari report.

JasperReport

JasperReport merupakan library di lingkungan Java untuk pemroses laporan. Dengan library ini, kita dapat menampilkan laporan dalam bentuk print preview, melakukan export ke beberapa format dokumen lain (antara lain PDF, HTML, text, Excel), menampilkan gambar, grafik maupun tabel. Berikut beberapa library lain yang digunakan juga dalam JasperReport : commons-beanutils.jar, commons-collections.jar, commons-digester.jar, commons-logging.jar, itext-1.02b.jar, jfreechart-0.9.21.jar.

Penjelasan mengenai fungsi-fungsi tiap library yang digunakan:

Library
Keterangan
commons-logging
untuk mengirim output ke log
commons-collections
untuk manage collection data
commons-beanutils
untuk java beans
commons-digester
untuk parsing xml
jfreechart
untuk mengatur penggunaan grafik
itext
untuk export report ke pdf atau rtf

Laporan yang kita buat nantinya dapat dikaitkan ke database berdasar connection string dan sql yang kita inginkan. JasperReport mendasarkan format dokumen definisi laporan yang akan dikompilasi berbasis pada XML, sehingga nantinya dapat dengan mudah dapat dikonversi ke format dokumen lain dengan memanfaatkan XSLT ataupun FO (Format Object).
 
Hasil Praktikum
Sebelum memulai pembuatan i-reportnya,, alangkah lebih baiknya untuk megecek apakah plugin ireport sudah ada apa belum..
dan kalau belum,,
mari kita simak tata cara menginstal plugin ireport pada netbeans (JAVA)..
pertama, arahkan kursor pada menu "Tools" dan klik submenu plugin.


dan muncullah tampilan kotak dialog seperti dibawah ini..
klik panel "Downloaded" lalu "Add Plugins"..
plugin yang perlu diinstall :
-  iReport-nb-3.5.1
-  jasperreports-components-plugin-nb-3.5.1
- jasperserver-plugin-nb-3.5.1
pilih ketiga plugins ini,, lalu klik open..


Muncul tampilan seperti dibawah ini, klik install yang ada pada kiri bawah.


kemudian, klik "Next"


beri tanda centang pada "I accept...bla bla bla..." dan klik "Install"


di tengah-tengah proses install, akan muncul kotk dialog seperti ini,,
gak usah bingung ya sobt,, langsung saja klik "continue"


tunggu sampai proses install selesai,.dan klik "Finish"


Selesai dah masalah plugins..
Kita lanjut ke pembuatan ireportnya ya guys..
klik kanan pada package dari project yang udah kita buat minggu kemaren.. pilih "new" terus "Other".


pilih "Report",, pada kotak sebelah kanan, pilih "Report Wizard" dan "Next"


untuk file name,, bisa diisi sesuka hati ya sobt..
"Next" lagi..


muncul kotak dialogs seperti berikut,, klik "New" yang ada pada samping kanan..


pilih "Database JDBC connection"..
kemudian "Next"..


pada kotak dialog ini, kita bisa mengisikan pada
- Name (sesuka hati)
- JDBC Driver (tergantung pada DBMS yang dipakai)
- JDBC URL (pada MYDATABASE diganti dengan nama database kamu ya)
- Username (nama yang digunakan untuk login postgres/ mysql)
- Password ( password yang digunakan untuk masuk postgres/mysql)
disini saya memakai DBMS postgresql, username "postgres" dan juga password "postgres".
centang "Save Password"


jangan langsung di save loh sobt,, di test aja dulu..
klik button "Test" pada bagian bawah kotak dialog..
fix nya kalo ada pop-up "Connection test succesfull" loh ya..
baru ntar langsung di "Save"


tetetetetetettttt.... oke fix
selanjutnya kotak dialog kayak gini ye..
langsung deh isikan Query nya..
kalo saya sih, yang global aja dulu.. 
"select * from mahasiswa"
abis itu langsung "Next"


di Groub by.. ada Fields-fields yang udah ada di database saya..
untuk memindahkan pada kolom yang sebelah kanan,, klik tanda ">>" yang ada diantara dua kolom itu..


ajaib kan??
field-field yang ada langsung migrasi ke kolom sebelah kanan..
lalu "Next"


pada steps Layout.. langsung "Next" aja ya..


kemudian nyampek juga di steps "Finish" ..
pilih "Tabular Layout" yaa.. dan
"Next"


klik button "Finish" dan selesai buat ireport nya..


tampilan awal yang muncul setelah saya klik button finish adalah,, tampilan awal IREPORT seperti gambar di bawah ini.
langsung ganti judul template IREPORT dengan MAHASISWA (atau sesuka hati kamu.. pokok  tetap sesuai dengan topik dan isi ireport nya loh ya..)


untuk melihat hasilnya, klik "Preview" yang ada pada bagian atas template..
kalau memang berhasil, akan muncul laporan data-data mahasiswa yang ada pada tabel mahasiswa.


pembuatan template.. selesai..
dilanjutkan dengan mengimportkan .jar pada libraries..
caranya dengan klik kanan pada Libraries lalu klik "Add JAR/Folder"
Libraries yang dimaksudkan disini adalah Libraries project yang udah kita buat sebelumnya,,
kali ini saya memakai project minggu kemaren dan kelas JFrame Form yang kemarin juga.. yaitu kelas mahasiswa. 


lalu cari letak beberapa library standar yang dibutuhkan untuk menampilkan ireport pada window. dan "Open" ..


kalo udah di add, dapat dilihat di Libraries..

di bawah listing kde public class mahasiswa extends javax.swing.JFrame ketik :
JasperReport JasRep;
JasperPrint JaPri;
Map param = new HashMap();
JasperDesign JasDes;


kalo udah lanjut dengan membuat parameter pada ireport, agar lebih enak ketika kita mau mencetak data mahasiswa per mahasiswa,, bukan global lagi.
kita kembali lagi membuka class "ireport.jrxml" .. lalu lihat pada bagian "Report Inspector"
klik Parameters dan klik kanan, klik "Add Parameter".


setelah parameter jadi, rename parameter yang telah kita buat. disini saya memakai parameter NIM. klik kanan parameter1 dan rename.


jangan lupa mengganti type variabel dari parameter "NIM"..
klik parameter NIM,, lalu liat di pojok kanan atas ada properties,, disitu ada parameter class..
cari yang "java.lang.Integer"


setelah selesai me-rename,
mengubah query yang telah dibuat tadi "select*from mahasiswa" menjadi query yang lebih significant .. "select * from mahasiswa where nim_mah = $P{nim};"
$P merupakan inisialisasi perintah Print dan nim merupakan parameter.


kembali ke desain form mahasiswa, dilanjutkan dengan menambahkan texfield dengan variabel parameter dan button print.


klik dua kali button print dan tulis listing program aksi seperti di bawah ini..
tulisan "ireport.jrxml" yang berwarna orange itu adalah nama kelas ireport yang telah kita buat tadi, yang telah preview juga.
"nim" (berwarna orange) itu adalah nama parameter yang telah kita buat pada ireport.jrxml tadi.
"parameter" adalah variable textfields sebelah button print tadi yang berfungsi sebagai tempat variabel NIM.

jangan lupa mengcopy class file "ireport.jrxml" pada project nya agar bisa terdetek.
untuk memindahkannya, enak melalui daftar file pada project yang dibuat dengan klik menu "Window" pada taskbar menu diatas.
Klik kanan class "ireport.jrxml" dan copy..


kemudian paste pada project kita.


jadinya akan seperti dibawah ini, perhatikan letak ireport.jrxml nya.

untuk melihat hasilnya run file pada class mahasiswa,
isikan NIM yang ingin dicetak pada textfield parameter. dan klik button print.


 zup..zup..zup...
jadi deh... tampilan ireport yang langsung bisa di cetak..


berikut listing code program lengkap yang ada pada class mahasiswa,,

package ireport_koneksi;
import java.awt.HeadlessException;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.xml.JRXmlLoader; /** * * @author User */ public class mahasiswa extends javax.swing.JFrame { koneksi n = new koneksi(); JasperReport JasRep; JasperPrint JasPri; Map param = new HashMap(); JasperDesign JasDes; /** * Creates new form mahasiswa */ public mahasiswa() { initComponents(); this.setLocationRelativeTo(this); } private void reset() { txketerangan.setText(""); txnim.setText(""); txnama.setText(""); txalamat.setText(""); rdpr.setSelected(false); rdlaki.setSelected(false); txkode.setSelectedItem(""); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // private void initComponents() { hapus = new javax.swing.JButton(); Tampil = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); txalamat = new javax.swing.JTextArea(); txkode = new javax.swing.JComboBox(); jLabel1 = new javax.swing.JLabel(); cari = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); reset = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); rdlaki = new javax.swing.JRadioButton(); jLabel5 = new javax.swing.JLabel(); rdpr = new javax.swing.JRadioButton(); txnim = new javax.swing.JTextField(); simpan = new javax.swing.JButton(); txnama = new javax.swing.JTextField(); edit = new javax.swing.JButton(); jScrollPane2 = new javax.swing.JScrollPane(); txketerangan = new javax.swing.JTextArea(); parameter = new javax.swing.JTextField(); print = new javax.swing.JToggleButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); hapus.setText("Hapus"); hapus.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { hapusActionPerformed(evt); } }); Tampil.setText("Tampil"); Tampil.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { TampilActionPerformed(evt); } }); txalamat.setColumns(20); txalamat.setRows(5); jScrollPane1.setViewportView(txalamat); txkode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "", "1", "2", "3" })); txkode.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { txkodeActionPerformed(evt); } }); jLabel1.setText("NIM"); cari.setText("Cari"); cari.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cariActionPerformed(evt); } }); jLabel2.setText("NAMA"); reset.setText("Reset"); reset.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { resetActionPerformed(evt); } }); jLabel3.setText("ALAMAT"); jLabel4.setText("KODE_FAKULTAS"); rdlaki.setText("Laki-laki"); rdlaki.setContentAreaFilled(false); rdlaki.setName("rdlaki"); // NOI18N rdlaki.setOpaque(true); rdlaki.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { rdlakiActionPerformed(evt); } }); jLabel5.setText("GENDER"); rdpr.setText("Perempuan"); txnim.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { txnimActionPerformed(evt); } }); simpan.setText("Simpan"); simpan.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { simpanActionPerformed(evt); } }); txnama.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { txnamaActionPerformed(evt); } }); edit.setText("Edit"); edit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { editActionPerformed(evt); } }); txketerangan.setColumns(20); txketerangan.setRows(5); jScrollPane2.setViewportView(txketerangan); parameter.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { parameterActionPerformed(evt); } }); print.setText("Print"); print.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { printActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(18, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel4) .addComponent(jLabel1) .addComponent(jLabel2) .addComponent(jLabel5) .addComponent(jLabel3)) .addGap(25, 25, 25) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(txnama) .addGroup(layout.createSequentialGroup() .addComponent(txnim, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cari)) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 233, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(txkode, javax.swing.GroupLayout.PREFERRED_SIZE, 233, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addComponent(simpan) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(edit, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(hapus)) .addComponent(rdlaki)) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Tampil) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(reset)) .addGroup(layout.createSequentialGroup() .addGap(34, 34, 34) .addComponent(rdpr)))) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addComponent(parameter, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(41, 41, 41) .addComponent(print)) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 351, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(24, 24, 24)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(txnim, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(cari)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(txnama) .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3)) .addGap(15, 15, 15) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txkode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(rdlaki) .addComponent(rdpr)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(simpan) .addComponent(edit) .addComponent(hapus) .addComponent(Tampil) .addComponent(reset)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(print) .addComponent(parameter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(20, Short.MAX_VALUE)) ); pack(); }// private void hapusActionPerformed(java.awt.event.ActionEvent evt) { int nim_mah = Integer.parseInt(txnim.getText()); try { try (Statement statemen = n.conn.createStatement()) { String sql = "delete from mahasiswa where nim_mah='" + nim_mah + "'"; statemen.executeUpdate(sql); } JOptionPane.showMessageDialog(null, "data mahasiswa telah terhapus"); reset(); } catch (SQLException | HeadlessException ex) { JOptionPane.showMessageDialog(null, "kesalahan, silahkan periksa" + ex); } // TODO add your handling code here: } private void TampilActionPerformed(java.awt.event.ActionEvent evt) { int nim; String nama; String alamat; int kode; String gender = ""; try { try (Statement statemen = n.conn.createStatement()) { String sql = "select nim_mah, nama_mah, alamat_mah, id_fak, gender from mahasiswa"; ResultSet rs = statemen.executeQuery(sql); while (rs.next()) { nim = Integer.parseInt(rs.getString("nim_mah")); nama = rs.getString("nama_mah"); alamat = rs.getString("alamat_mah"); kode = Integer.parseInt(rs.getString("id_fak")); gender = rs.getString("gender"); txketerangan.append("NIM : " + nim + " \nNAMA : " + nama + " \n" + "ALAMAT : " + alamat + " \nKODE FAKULTAS : " + kode + "\nGENDER : " + gender + "\n\n"); } } } catch (SQLException | NumberFormatException e) { JOptionPane.showMessageDialog(null, "terjadi kesalahan \n silahkan periksa lagi " + e); } } private void txkodeActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void cariActionPerformed(java.awt.event.ActionEvent evt) { int nim = Integer.parseInt(txnim.getText()); String nama; String alamat; int kode; String gender = ""; try { try (Statement statemen = n.conn.createStatement()) { String sql = "select nim_mah, nama_mah, alamat_mah, id_fak, gender " + "from mahasiswa where nim_mah='" + nim + "';"; ResultSet rs = statemen.executeQuery(sql); if (rs.next()) { nim = Integer.parseInt(rs.getString("nim_mah")); nama = rs.getString("nama_mah"); alamat = rs.getString("alamat_mah"); kode = Integer.parseInt(rs.getString("id_fak")); gender = rs.getString("gender"); txketerangan.append("NIM : " + nim + " \nNAMA : " + nama + " \n" + "ALAMAT : " + alamat + " \nKODE FAKULTAS : " + kode + " \nGENDER : " + gender + "\n\n"); JOptionPane.showMessageDialog(null, "data ditemukan"); } else { JOptionPane.showMessageDialog(null, "data tidak ditemukan"); } } } catch (SQLException | NumberFormatException | HeadlessException e) { System.err.print(e); } } private void resetActionPerformed(java.awt.event.ActionEvent evt) { reset(); // TODO add your handling code here: } private void rdlakiActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void txnimActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void simpanActionPerformed(java.awt.event.ActionEvent evt) { int nim_mah = Integer.parseInt(txnim.getText()); String nama_mah = txnama.getText(); String alamat_mah = txalamat.getText(); int id_fak = Integer.parseInt((String) txkode.getSelectedItem()); String gender = ""; if (rdlaki.isSelected()) { gender = "L"; } else { gender = "P"; } try { try (Statement statemen = n.conn.createStatement()) { String sql = "insert into mahasiswa values ('" + nim_mah + "','" + nama_mah + "','" + alamat_mah + "','" + id_fak + "','" + gender + "')"; statemen.executeUpdate(sql); } JOptionPane.showMessageDialog(null, "data mahasiswa telah tersimpan"); txketerangan.append("NIM : " + nim_mah + " \nNAMA : " + nama_mah + " \n" + "ALAMAT : " + alamat_mah + " \nKODE FAKULTAS : " + id_fak + "\nGENDER : " + gender + "\n\n"); } catch (SQLException | HeadlessException ex) { JOptionPane.showMessageDialog(null, "kesalahan, silahkan periksa" + ex); } // TODO add your handling code here: } private void txnamaActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void editActionPerformed(java.awt.event.ActionEvent evt) { int nim_mah = Integer.parseInt(txnim.getText()); String nama_mah = txnama.getText(); String alamat_mah = txalamat.getText(); int id_fak = Integer.parseInt(String.valueOf((txkode.getSelectedItem()))); String gender = ""; if (rdlaki.isSelected()) { gender = "L"; } else { gender = "P"; } try { try (Statement statemen = n.conn.createStatement()) { String sql = "update mahasiswa set nama_mah='" + nama_mah + "',alamat_mah='" + alamat_mah + "',id_fak='" + id_fak + "',gender='" + gender + "' where nim_mah='" + nim_mah + "'"; statemen.executeUpdate(sql); } JOptionPane.showMessageDialog(null, "Data Mahasiswa telah diubah ^^"); txketerangan.append("NIM : " + nim_mah + " \nNAMA : " + nama_mah + " \n" + "ALAMAT : " + alamat_mah + " \nKODE FAKULTAS : " + id_fak + "\nGENDER : " + gender + "\n\n"); } catch (SQLException | HeadlessException e) { JOptionPane.showMessageDialog(null, "Kesalahan, silahkan periksa kembali" + e); } // TODO add your handling code here: } private void printActionPerformed(java.awt.event.ActionEvent evt) { try { File report = new File("ireport.jrxml"); JasDes = JRXmlLoader.load(report); param.put("nim", Integer.parseInt(parameter.getText())); JasRep = JasperCompileManager.compileReport(JasDes); JasPri = JasperFillManager.fillReport(JasRep, param, n.conn); JasperViewer.viewReport(JasPri, false); } catch (JRException | NumberFormatException e) { JOptionPane.showMessageDialog(null, e); } // TODO add your handling code here: } private void parameterActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ // /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(mahasiswa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(mahasiswa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(mahasiswa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(mahasiswa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } // try { UIManager.setLookAndFeel("com.jtattoo.plaf.smart.SmartLookAndFeel"); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new mahasiswa().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton Tampil; private javax.swing.JButton cari; private javax.swing.JButton edit; private javax.swing.JButton hapus; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextField parameter; private javax.swing.JToggleButton print; private javax.swing.JRadioButton rdlaki; private javax.swing.JRadioButton rdpr; private javax.swing.JButton reset; private javax.swing.JButton simpan; private javax.swing.JTextArea txalamat; private javax.swing.JTextArea txketerangan; private javax.swing.JComboBox txkode; private javax.swing.JTextField txnama; private javax.swing.JTextField txnim; // End of variables declaration }

Kesimpulan :
pada praktikum ini, praktikan dapat belajar membuat ireport dengan jasperreport dan juga membuat ireport dengan menggunakan parameter. 
sebelum membuat ireport, pada java (netbeans) harus sudah ada plugin ireport. dan kalau belum ada, silahkan baca tutorial diatas..(terlalu panjang untuk dijelaskan di kesimpulan.. hehehe)
setelah menginstall plugin dilanjutkan dengan membuat template ireport dengan class yang ber-eksistensi .jrxml ..
setelah kerangkanya jadi, membuat parameter (digunakan untuk menyeleksi data yang akan dicetak).
lalu dilanjutkan dengan pemanggilan file jrxml pada java dan pembuatan listing kode aksi pada button print. dengan steps-steps yang lumayan panjang.

Kritik :
Masalahnya terletak pada Netbeans nya, setelah penginstalan plugin dan pembuatan template ireport. kerangka kasar ireport tidak langsung muncul,, kebanyakan yang muncul adalah hanya listing kode programnya.

Saran :
untuk menangani masalah diatas, dari yang saya alami,,, dapat diselesaikan dengan mng-close kan diri dari Netbeans lalu di-open lagi. jika tetap tidak ada atau bahkan Netbeans tidak bisa di-open (di-open belum sampe terbuka baru loading,,hampir selesai dan menghilang secara tiba-tiba). Langkah yang paling ampuh adalah meng-uninstall netbeans versi tersebut dan meng-install Netbeans versi lain. bahkan lebih bagus kalau menginstall JDK versi lain juga dan jangan lupa meng-uninstall JDK yang awal tadi.

Manfaat :
baik praktikkan maupun pembaca dapat mengetahui cara membuat ireport pada Java . 
praktikum kali ini benar-benar membuat praktikkan mengalami sensasi yang luar biasa karena harus berkali kali meng-uninstall serta meng-install Netbeans dan JDK dikarenakan error nya. Jadi melalui praktikum kali ini, praktikan juga dapat belajar arti kesabaran yang sesungguhnya.. :v

Daftar Pustaka :
modul praktikum desain basis data 2014
https://ekocahyono89.wordpress.com/2012/08/10/koneksi-postgresql-ke-jasper-ireport/
http://blog.stikom.edu/rahmawati/files/2014/01/Cara-membuat-Laporan-pada-iReport-untuk-Pemrograman-Java.pdf
http://pancaprasetiya93.blogspot.com/2013/07/tutorial-membuat-laporan-menggunakan.html

Komentar

  1. param.put & n.conn

    itu kok tanda seru kenapa

    BalasHapus
  2. Makasih gan info nya bermanfaat 👍

    BalasHapus
  3. saya mau tanya saya ingin menampilkan Laporan nya di form gak bisa,untuk mendapatkan semua library nya gmn ?
    bales ke email saya yah
    ebuddy1788@gmail.com

    BalasHapus
  4. fill report saya yang di button print ko tidak terdeteksi yah .? itu kenapa yah

    BalasHapus
  5. kalo mau nampilin gambar daridatabas ke dalam ireport gmana bos

    BalasHapus
  6. file koneksinya tolong disertakan juga dong, ini ambigu soalnya kalo file koneksinya ga ditampilin

    BalasHapus

Posting Komentar