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 :
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"
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"
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..)
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"
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
}
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") //
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
param.put & n.conn
BalasHapusitu kok tanda seru kenapa
Makasih gan info nya bermanfaat 👍
BalasHapussaya mau tanya saya ingin menampilkan Laporan nya di form gak bisa,untuk mendapatkan semua library nya gmn ?
BalasHapusbales ke email saya yah
ebuddy1788@gmail.com
fill report saya yang di button print ko tidak terdeteksi yah .? itu kenapa yah
BalasHapuskalo mau nampilin gambar daridatabas ke dalam ireport gmana bos
BalasHapusn.conn dapet drmn ya ka?
BalasHapusfile koneksinya tolong disertakan juga dong, ini ambigu soalnya kalo file koneksinya ga ditampilin
BalasHapus