Playing with JTable and JCheckBox

Sudah pernah mencoba menampilkan JCheckBox didalam JTable ? Bagi sebagian teman-teman mungkin langsung berkata “Itu kan gampang, tinggal tambahkan 1 kolom dengan tipe data Boolean kita sudah dapat menampilkan JCheckBox didalam JTable, yups memang benar dan jawaban teman-teman sudah terdapat pada tutorial Java Swing :) Ok, sekarang mari kita bahas satu persatu bagaimana cara menampilkan JCheckBox didalam JTable. Untuk menampilkan JCheckBox didalam JTable, biasanya saya akan membuat sebuah Domain Class yang mempunyai tipe data boolean sesuai kata teman-teman seperti dibawah ini :

Nah setelah selesai membuat Domain seperti diatas, sekarang mari kita bikinkan tabel modelnya seperti dibawah ini :


Pembuatan tabel model sudah selesai, sekarang saatnya mari kita coba :) Buatlah sebuah JFrame baru kemudian tambahkanlah komponen JTable pada JFrame tersebut, setelah itu pindahlah ke source mode dengan menekan kombinasi tombol CTRL+PAGE_UP/PAGE_DOWN. Pada jendela source mode tambahkanlah 1 buah method yang akan mengisi JTable dengan data List Of Domain seperti dibawah ini :

Setelah semuanya siap, sekarang tambahkanlah didalam constructor JFrame yang telah dibuat, dan panggilah method initTable() dari dalam constructor seperti dibawah ini :

Sekarang coba jalankan dan kita akan mendapati tampilan seperti gambar dibawah ini :
gambar_jtable_jcheckbox_standart

Mudah bukan ? Yups, karena secara default JTable akan me-render cell yang mempunyai tipe data Boolean dengan JCheckBox. Jadi kita tinggal mengirimkan nilai Boolean saja ke JTable dan biarkan JTable sendiri yang mengurusi urusan rendering-nya :)

Tapi sekarang bagaimana kalau misalkan kita ingin menampilkan JCheckBox beserta dengan text-nya sekalian dan itu kita tampilkan didalam JTable ? Karena tampilan JCheckBox yang standart adalah seperti gambar dibawah ini :
standart_jcheckbox

Kalau kita ingin membuat supaya JTable kita berisi JCheckBox seperti gambar diatas, tentunya kita tidak bisa menggunakan cara pada langkah pertama diatas :) Nah agar kita dapat menampilkan JCheckBox beserta textnya pada JTable, langkah-langkah yang saya lakukan yaitu yang pertama yaitu membuat sebuah Domain Class yang akan dipakai. Domain Class ini mempunyai tipe data JCheckBox dan potongan kodenya adalah seperti dibawah ini :

Setelah selesai membuat sebuah DomainClass, buatlah sebuah TableModel yang akan kita gunakan untuk menampilkan data-data yang kita masukkan. Sedangkan kode dari tablemodelnya adalah seperti dibawah ini :

Karena kita tidak menggunakan renderer standart dari JTable, maka kita harus buat sendiri renderer yang fungsinya agar yang ditampilkan adalah JCheckBox. Untuk membuat sebuah CellRenderer sendiri, buatlah sebuah class yang meng-implements TableCellRenderer dan extends-lah komponen yang ingin dijadikan sebagai CellRenderer agar tampilan dari Cell yang di render menampilkan komponen yang kita inginkan seperti kode dibawah ini :

Sampai disini, JTable sudah dapat menampilkan JCheckBox dengan sempurna beserta text yang kita inginkan. Tapi jika kita coba meng-klik salah satu JChecBox, tampilan pada JTable kita akan menjadi seperti gambar dibawah ini :
buggy

Hmm.. kenapa hasilnya koq bisa seperti gambar diatas ??? Jawabannya adalah karena kita belum menambahkan sebuah TableCellEditor yang fungsinya untuk mendeteksi komponen apa yang kita gunakan. Sekarang buatlah sebuah class yang meng-extends AbstractCellEditor dan meng-implements-kan TableCellEditor seperti kode dibawah ini :

Setelah selesai membuat sebuah CellEditor, sekarang buatlah sebuah JFrame kemudian tambahkanlah komponen JTable pada JFrame tersebut, setelah itu buatlah 1 method yang berfungsi untuk mengisi table model dan memasang CellRenderer dan CellEditor pada tabel kita seperti kode dibawah ini :

Dan langkah terakhir yaitu, panggillah method initTable() dari dalam constructor seperti kode dibawah ini :

Sekarang coba jalankan dengan menekan kombinasi tombol SHIFT+F6 dan jika tidak ada pesan error, maka kita akan melihat tampilan seperti gambar dibawah ini:
hasil_akhir

dan coba lihat pada terminal, jika kita mencoba melakukan proses select pada salah 1 JCheckBox maka akan menampilkan pesan seperti tampilan dibawah ini:

Ok mudah bukan ?? :) Yang perlu diperhatikan disini yaitu adalah :
- Buatlah sebuah TableCellRenderer untuk merender JTable agar menampilkan komponen yang kita inginkan.
- Jika kita perlu melakukan proses editing pada cell yang kita render maka, buatlah sebuah TableCellEditor yang meng-extends komponen yang kita tampilkan untuk mengambil komponen yang kita gunakan di TableCellRenderer.

Link-link terkait :
- Download Sample Project JTable_and_JCheckBox.zip
- SVN Access Sample ProjectJTable and JCheckBox
- Tutorial JTable
- JCheckBox
- SubVersion Mudah Dengan RabbitVCS
Tulisan ini dibuat untuk menyukseskan Lomba Blog Open Source P2I-LIPI dan Seminar Open Source P2I-LIPI 2009.

Tags:

9 Responses to “Playing with JTable and JCheckBox”

  1. achmad says:

    Mas , mw tanya kalo misalnya untuk menambahkan event handling supaya dapat melakukan check pada checkBox dengan menekan tombol spasi , bagaimana mas ya ?

    terima kasih untuk tutorial dan penjelasanya …

  2. hehe says:

    mas kalo menghubungkan kedatabase gimana?
    misalnya waktu di kasi tanda cek didatabase langsung terset tanggal
    –trims–

  3. jok says:

    fungsi main kasus ke 2 ga ada ya?

Leave a Reply

[+] adsenseid emoticons by Martinus Ady H. Modified from nartzco source code.