Halaman

Kamis, 28 Juli 2011

Paging Sederhana dalam Java

Ketika berbicara mengenai paging, bahasan yang biasanya terpikirkan pasti berhubungan dengan pemrograman web. Yup... sebagaimana dalam artikel sebelumnya paging merupakan salah satu teknik untuk merepresentasikan data dalam jumlah yang besar dengan model seperti halaman buku. Tapi dalam ulasan kali ini, akan dijelaskan teknik paging sederhana dalam Java Desktop Application, untuk memudahkan cara menmpilkan data yang menginginkan model tampilan seperti paging dalam web.

Berikut gambar contoh paging sederhana dalam java.



Perbedaan dari paging dalam web biasanya yaitu terletak pada, model pagingnya. Jika di halaman web biasanya menggunakan deretan angka untuk menunjukkan setiap halaman paging, seperti : prev 1, 2, 3, 4… next. Namun dalam ulasan berikut ini penulis menggunakan JCombo box untuk mengindeks setiap halaman, dikarenakan pengimplementasian terhadap JCombo Box lebih mudah. Sebelum lebih lanjut, logika dalam menerapkan paging ini, seperti yang telah penulis jelaskan artikel sebelumnya tentang Tiga Langkah Menerapkan Paging

Langkah pertama… buat terlebih dahulu interface seperti gambar diatas. Komponen yang terpenting tabel, jcombobox dan jlabel (lingkaran merah). Setelah selesai dibuat jangan lupa ganti nama variabelnya agar lebih mudah diinget… n_n
Kemudian buat method untuk mendapatkan data dari database yang akan ditampilkan di dalam tabel. Berikut source codenya :

private Object[][] data(int posisi, int batas) {
        Object dataPasien[][] = null;
        con = kon.logon();
        try {
            sta = con.createStatement();
            String sql = "Select * from db_anak limit "+posisi+", "+batas;
            ResultSet rs = sta.executeQuery(sql);
            rs.last();
            int row = rs.getRow();
            dataPasien = new Object[row][3];
            rs.beforeFirst();
            int no = 1 + posisi;
            int p = 0;
            while (rs.next()){
                dataPasien[p][0]=String.valueOf(no);
                dataPasien[p][1] = rs.getString("nm_pasien").toString();
                dataPasien[p][2] = rs.getString("kk").toString();
                p++;
                no++;
            }
        } catch (SQLException ex) {
            System.err.println("error in getData at : "+ex);
        }        
        return dataPasien;
    }

Method dengan nama data diatas berfungsi untuk mendapatkan data dari database kemudian disimpan dalam variabel array 2 dimensi.

Kemudian buat method baru untuk mengisi tabel dengan data dari database. Berikut source codenya untuk method setIsitabel() :

private void setIsitabel(int posisi, int batas){
  DefaultTableModel dtm = new DefaultTableModel(data(posisi, batas), new String[] {"NO","Nama", "Kepala Keluarga"});
  tb_data.setModel(dtm);
}

Kemudian buat method untuk menghitung jumlah data dan jumlah page (halaman index) yang akan diletakkan di dalam jcombobox. Berikut source codenya untuk setCountRowData():

private void setCountRowData(){
        con = kon.logon();
        try {
            sta = con.createStatement();
            String sql ="select * from db_anak";
            ResultSet rs = sta.executeQuery(sql);
            rs.last();
            int jumlahData = rs.getRow();
            totalHal = (int) Math.ceil(jumlahData/getBatas())+1;            
            System.out.println("jumlah hal : "+totalHal);
            int p = 1;
            while (p <= totalHal){
                cb_page.addItem(p);
                p++;
            }                
        } catch (SQLException ex) {
            System.err.println("Error in setCountRowData at : "+ex);
        }
    }
Kemudian setelah beberapa method diatas ditulis, jangan lupa buat variabel global seperti dibawah ini (gampangnya letakkan di atas constructor). 

koneksi kon = new koneksi();
    Connection con;
    Statement sta;
    int batas = 6;
    int halaman = 1;
    int posisi = 0;
    int totalHal = 0;

kelas koneksi diatas merupakan kelas koneksi sendiri yang saya panggil untuk menangani masalah koneksi ke database. Jangan lupa kelas Connection dan Statement di-import dari java.sql.*;. Kemudian panggil ketiga method diatas di dalam contructor (dibawah initComponents() jika anda memakai netbeans). Kurang lebih seperti berikut source codenya : 

public tabelDataPasien() {
        initComponents();
        setIsitabel(posisi, batas);
        setCountRowData();
        tf_totalPage.setText("from "+totalHal+" pages");
    }
Buat fungsi untuk menangani ketika nilai JComboBox dipilih (dirubah). Caranya, klik kanan component JComboBox pilih : Events - Items - ItemStateChanged. Lihat gambar dibawah untuk lebih jelasnya :

 

Tuliskan source code dibawah ini di dalam method itemStateChanged. Berikut source codenya : 
 
int pageNow = Integer.parseInt(cb_page.getSelectedItem().toString());
        posisi = (pageNow - 1)*batas;
        setIsitabel(posisi, batas);

Jalankan programnya...jika tidak ada error maka akan muncul seperti yang ada pada gambar pertama.