Cara Membuat Report di Java dengan JasperReport - Java Community

Cara Membuat Report di Java dengan JasperReport

Cara Membuat Report di Java dengan JasperReport - Dalam pemrograman java, kalian harus mengenal library JasperReport atau IReport. Pada tutorial java kali ini saya akan membahas apa itu JasperReport, bagaimana cara menggunakan JasperReport dan contoh penggunaan JasperReport.

cara membuat laporan dengan jasperreport

Apa itu JasperReport?

JasperReport merupakan aplikasi berbasis open source yang digunakan untuk membuat report atau laporan pada pemrograman java. JasperReport selain digunakan untuk melakukan cetak atau printing juga memiliki keluaran laporan dalam berbagai format, seperti : Microsoft Excel, CSV, PDF, RTF, ODC, HTML dan XML. JasperReport dapat digunakan pada Java Desktop (Java Swing) maupun Java Web (J2EE).

Tutorial Cara Membuat Report

Tools yang saya gunakan sebagai berikut :
  • Netbeans IDE
  • IReport (bagi yang belum memilikinya, silahkan download jasper report di situs resminya disini)
  • Untuk database saya menggunakan Postgresql versi 11
dan beberapa library pendukung ireport seperti :
  • commons-beanutils-1.8.0.jar
  • commons-collections-2.2.1.jar
  • commons-digester-2.1.jar
  • commons-logging-1.1.1.jar
  • commons-javaflow-20060411.jar
  • groovy-all-2.0.1.jar
  • iText-2.1.7.js2.jar
  • jasperreports-4.7.0.jar (*bisa diganti dengan versi terbaru)
  • core-3.1.1.jar
  • jdt-compiler-3.1.1.jar
  • jxl-2.6.10.jar
  • poi-3.7-20101029.jar
Anda bisa download library tersebut disini

Membuat design laporan menggunakan ireport (report design software).
Berikut struktur project yang saya buat untuk membuat contoh report :

Contoh Source Code IReport di Java

     - ContohPrinting
       - com.community.controller
         - ControllerPrinting.java
       - com.community.entity
         - Mahasiswa.java
       - com.community.sql
         - IMahasiswa.java
         - Koneksi.java
         - MahasiswaSQL.java
       - com.community.view
         - AppMain.java
         - ViewPrinting.java

  • Membuat Class Entity
  • Buatlah class Mahasiswa di package com.community.entity, seperti berikut :
    package com.community.entity;
    
    public class Mahasiswa {
        private long id;
        private String nim;
        private String nama;
        private String ttl;
        private String jurusan;
        private String alamat;
    
        public Mahasiswa() {
        }
    
        public Mahasiswa(long id, String nim, String nama, String ttl, 
                String jurusan, String alamat) {
            this.id = id;
            this.nim = nim;
            this.nama = nama;
            this.ttl = ttl;
            this.jurusan = jurusan;
            this.alamat = alamat;
        }
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getNim() {
            return nim;
        }
    
        public void setNim(String nim) {
            this.nim = nim;
        }
    
        public String getNama() {
            return nama;
        }
    
        public void setNama(String nama) {
            this.nama = nama;
        }
    
        public String getTtl() {
            return ttl;
        }
    
        public void setTtl(String ttl) {
            this.ttl = ttl;
        }
    
        public String getJurusan() {
            return jurusan;
        }
    
        public void setJurusan(String jurusan) {
            this.jurusan = jurusan;
        }
    
        public String getAlamat() {
            return alamat;
        }
    
        public void setAlamat(String alamat) {
            this.alamat = alamat;
        }
    
        @Override
        public String toString() {
            return nim;
        }
        
    }
    
  • Membuat Class Koneksi
  • Buatlah 2 buah class (Koneksi dan MahasiswaSQL) dan 1 buah interface (IMahasiswa) di package com.community.sql, seperti berikut :
    Class Koneksi
    package com.community.sql;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class Koneksi {
        public static Connection getKoneksi() {
            Connection koneksi = null;
            try {
                String driver = "org.postgresql.Driver";
                String url = "jdbc:postgresql://localhost:5432/db_mahasiswa";
                String user = "postgres";
                String password = "postgres";
                
                Class.forName(driver);
                koneksi = DriverManager.getConnection(url, user, password);
    
            } catch (ClassNotFoundException | SQLException ex) {
                ex.printStackTrace();
            }
            
            return koneksi;
        }
    }
    

    Interface IMahasiswa
    package com.community.sql;
    
    import com.community.entity.Mahasiswa;
    import java.util.List;
    
    public interface IMahasiswa {
        public List getDataMahasiswa();
    }
    
    

    Class MahasiswaSQL
    package com.community.sql;
    
    import com.community.entity.Mahasiswa;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MahasiswaSQL implements IMahasiswa{
    
        @Override
        public List getDataMahasiswa() {
            Connection con = Koneksi.getKoneksi();
            String query = "SELECT * FROM m_mahasiswa";
            Statement st = null;
            ResultSet rs = null;
            List list = new ArrayList<>();
            try{
                st = con.createStatement();
                rs = st.executeQuery(query);
                while(rs.next()){
                    list.add(new Mahasiswa(rs.getLong("id_mahasiswa"), rs.getString("nim"), 
                            rs.getString("nama"), rs.getString("ttl"), rs.getString("jurusan"), 
                            rs.getString("alamat")));
                }
            }catch(SQLException ex){
                ex.printStackTrace();
            }finally{
                try{
                    if(con!=null){
                        con.close();
                    }
                    if(st!=null){
                        st.close();
                    }
                    if(rs!=null){
                        rs.close();
                    }
                }catch(SQLException ex){
                    ex.printStackTrace();
                }
            }
            return list;
        }
    
    }
    
  • Membuat Tampilan atau View Report
  • Buatlah sebuah class ViewReport untuk membuat sebuah tampilan JFrame.
    package com.community.view;
    
    import com.community.controller.ControllerPrinting;
    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    
    public class ViewPrinting extends JFrame implements ActionListener{
        private ControllerPrinting cp;
        private JTable tabel;
        private DefaultTableModel model;
        private JButton cetak;
        
        public ViewPrinting() {
            setTitle("Contoh Printing Jasper Report");
            setSize(1000, 500);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setResizable(false);
            userInterface();
            cp = new ControllerPrinting(this);
        }
        
        private void userInterface(){
            JPanel panelHeader = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
            
            JLabel header = new JLabel("Data Mahasiswa");
            header.setHorizontalAlignment(JLabel.CENTER);
            header.setVerticalAlignment(JLabel.CENTER);
            header.setFont(new Font("Arial", Font.PLAIN, 20));
            panelHeader.add(header);
            
            getContentPane().add(panelHeader, BorderLayout.NORTH);
            
            model = new DefaultTableModel();
            model.setColumnIdentifiers(new Object[]{
                "NIM", "Nama", "Tempat, Tanggal Lahir", "Alamat", "Jurusan"
            });
            
            tabel = new JTable(model);
            getContentPane().add(new JScrollPane(tabel));
            
            JPanel panelButton = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
            
            cetak = new JButton("Cetak");
            cetak.addActionListener(this);
            panelButton.add(cetak);
            
            getContentPane().add(panelButton, BorderLayout.SOUTH);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource()==cetak){
                cp.cetakLaporan();
            }
        }
        
        public DefaultTableModel getModel() {
            return model;
        }
    
    }
    

    Membuat class AppMain untuk dijadikan sebagai MainClass.
    package com.community.view;
    
    public class AppMain {
        public static void main(String[] args) {
            ViewPrinting obj = new ViewPrinting();
            obj.setVisible(true);
        }
    }
    
    
  • Menambahkan Aksi atau Controller Printing
  • Buatlah sebuah class ControllerPrinting untuk mengambil data dari database dan aksi cetak atau printing.
    package com.community.controller;
    
    import com.community.entity.Mahasiswa;
    import com.community.sql.IMahasiswa;
    import com.community.sql.MahasiswaSQL;
    import com.community.view.ViewPrinting;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JOptionPane;
    import net.sf.jasperreports.engine.JRException;
    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.engine.data.JRBeanCollectionDataSource;
    import net.sf.jasperreports.engine.design.JasperDesign;
    import net.sf.jasperreports.engine.xml.JRXmlLoader;
    import net.sf.jasperreports.view.JasperViewer;
    
    public class ControllerPrinting {
        private ViewPrinting view;
        private List list = new ArrayList<>();
    
        public ControllerPrinting(ViewPrinting view) {
            this.view = view;
            getDataMahasiswa();
        }
        
        private void getDataMahasiswa(){
            IMahasiswa sql = new MahasiswaSQL();
            list = sql.getDataMahasiswa();
            
            for(Mahasiswa obj : list){
                view.getModel().addRow(new Object[]{
                    obj, obj.getNama(), obj.getTtl(), obj.getAlamat(), obj.getJurusan()
                });
            }
        }
        
        public void cetakLaporan(){
            try {            
                String path = "report/laporan.jrxml";
                JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
                File file = new File(path);
                JasperDesign jasperDesign = JRXmlLoader.load(file);
                JasperReport report = JasperCompileManager.compileReport(jasperDesign);
                JasperPrint print = JasperFillManager.fillReport(report, null, dataSource);
                JasperViewer.viewReport(print, false);
            } catch (JRException ex) {
                ex.printStackTrace();
                JOptionPane.showMessageDialog(null, "Gagal Mencetak Laporan");
            }
        }
    }
    

    Catatan :
    • Method getDataMahasiswa berfungsi untuk mengambil data dari database dan dimasukkan ke dalam JTable.
    • Method cetakLaporan() merupakan method yang saya gunakan untuk melakukan printing tanpa parameter (ireport tanpa parameter).

Hasil output dari contoh program ireport diatas sebagai berikut :

Cara+Membuat+Report+di+Java+dengan+JasperReport

Cara menampilkan laporan di netbeans, anda perlu klik button Cetak. Berikut ini tampilan laporan Jasper Report.

Cara+Membuat+Report+di+Java+dengan+JasperReport


Catatan :
IReport tidak mendukung Java 8 atau diatasnya, bagi kalian yang menggunakan Java 8 atau diatasnya maka yang perlu dilakukan adalah Meng-install Java 7.

Bagi kalian yang ireport tidak bisa tampil, pastikan path-nya sudah benar.

Untuk source code cara membuat laporan di java netbeans seperti diatas, anda bisa download disini dan database-nya disini

Sekian tutorial membuat laporan dengan jasperreport, silahkan tinggalkan komentar jika ada kendala dalam mengikuti tutorial diatas. Semoga bermanfaat.


Copyrighted.com Registered & Protected

Subscribe to receive free email updates:

0 Response to "Cara Membuat Report di Java dengan JasperReport"

Posting Komentar