Menampilkan JCheckBox di JTable


Java Programming

Java Programming

Peralatan yang diperlukan :

  1. Java Development Kit 1.6

Biasanya jika kita akan menghapus sebuah baris di JTable, kita menseleksinya lalu tekan delete atau klik tombol hapus, tapi bagaimana jika kita akan menghapus beberapa baris? Dan barisnya itu terpisah-pisah? Hmm, salah satunya adalah dengan memberi kolom Hapus, jika bernilai TRUE, maka baris tersebut akan dihapus 😀 Dan supaya lebih bermakna kita ubah tampilan kolom hapusnya itu dengan JCheckBox, daripada menggunakan tulisan true atau false 😀

Misal kita punya kelas barang, setelah itu jangan lupa beri sebuah property lagi dengan nama hapus, atau terserah anda :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package khannedy.blogging.tablecheck;

/**
 *
 * @author echo
 */
public class Barang {

    private Long id;
    private String nama;
    private Long harga;
    private boolean hapus;

    public boolean isHapus() {
        return hapus;
    }

    public void setHapus(boolean hapus) {
        this.hapus = hapus;
    }

    public Long getHarga() {
        return harga;
    }

    public void setHarga(Long harga) {
        this.harga = harga;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }
}

Setelah itu buat tabel modelnya :

package khannedy.blogging.tablecheck;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class BarangTableModel extends AbstractTableModel {

    private List<Barang> list;

    public BarangTableModel() {
        list = new ArrayList<Barang>();
    }

    public int getRowCount() {
        return list.size();
    }

    public int getColumnCount() {
        return 4;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return list.get(rowIndex).getId();
            case 1:
                return list.get(rowIndex).getNama();
            case 2:
                return list.get(rowIndex).getHarga();
            case 3:
                return list.get(rowIndex).isHapus();
            default:
                return null;
        }
    }

    @Override
    public String getColumnName(int column) {
        switch (column) {
            case 0:
                return "Id";
            case 1:
                return "Nama";
            case 2:
                return "Harga";
            case 3:
                return "Hapus";
            default:
                return null;
        }
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex == 3) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        if (columnIndex == 3) {
            return Boolean.class;
        } else {
            return super.getColumnClass(columnIndex);
        }
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if (aValue != null && aValue instanceof Boolean && columnIndex == 3) {
            boolean delete = (Boolean) aValue;
            list.get(rowIndex).setHapus(delete);
        }
    }

    public void add(Barang barang) {
        list.add(barang);
        fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
    }

    public void remove() {
        List barangs = new ArrayList();
        for (Barang barang : list) {
            if (!barang.isHapus()) {
                barangs.add(barang);
            }
        }
        list = barangs;
        fireTableDataChanged();
    }
}

Yang perlu diperhatikan adalah pada metode isCellEditable(row, column), metode ini digunakan untuk mengecek apakah pada baris dan kolom tersebut dapat diubah langsung lewat JTable, jika bisa, maka harus return true. Pada metode itu saya menyatakan bahwa jika kolomnya adalah kolom ke 4 (artinya indeks kolom harus 3 karena dimulai dari 0), maka artinya kolom 4, dimana disitu adalah kolom “hapus” dapat diubah langsung, oleh karena itu saya override metodenya menjadi :

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (columnIndex == 3) {
            return true;
        } else {
            return false;
        }
    }

Selanjutnya karena pada kolom ke 4 tersebut nilainya adalah boolean, maka kita perlu memberi tahu pada JTable bahwa kolom ke 4 adalah Boolean. Hal ini nanti akan membuat JTable otomatis menampilkan JCheckBox pada kolom ke 4. Untuk memberitahunya, kita perlu menggoverride metode getColumnClass(column) menjadi seperti ini :

    @Override
    public Class getColumnClass(int columnIndex) {
        if (columnIndex == 3) {
            return Boolean.class;
        } else {
            return super.getColumnClass(columnIndex);
        }
    }

Selanjutnya, setelah JTable mendeteksi bahwa kolom no 4 (“Hapus”) dapat diubah, maka kita perlu juga mengubah metode untuk mengubah kolom tersebut yaitu setValueAt(row, column) menjadi seperti ini :

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        if (aValue != null && aValue instanceof Boolean && columnIndex == 3) {
            boolean delete = (Boolean) aValue;
            list.get(rowIndex).setHapus(delete);
        }
    }

Setelah itu kita buat sebuah metode remove() yang nanti kita gunakan saat menghapus seluruh baris yang memiliki nilai kolom “hapus” true.

    public void remove() {
        List<Barang> barangs = new ArrayList<Barang>();
        for (Barang barang : list) {
            if (!barang.isHapus()) {
                barangs.add(barang);
            }
        }
        list = barangs;
        fireTableDataChanged();
    }

Selesai, sekarang saatnye membuat Form. Silahkan Anda buat form seperti dibawah ini :

Form

Form

Setelah itu ubah tableModel jtable yang ada pada form menjadi BarangTableModel yang telah dibuat sebelumnya, setelah itu buat actionListener untuk tombol Hapus, isinya adalah memanggil metode remove() milik BarangTableModel.

    private void jButtonHapusActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        tableModel.remove();
    }

Sekarang coba jalankan, maka hasilnya seperti ini :

Form Running

Form Running

Silahkan download projectnya disini

Iklan

16 pemikiran pada “Menampilkan JCheckBox di JTable

  1. Mas.. kL lgsung konek ke database gmn?
    kL konek databasenya perlu jembatan seperti db4o or ooql gtu gmn jg mas??
    pnh coba lum mas???????

  2. bisa kebayang anak muda indonesia kalo semua melek js, jquery…jgn 10, 5thn ke depan akan bersinar pendidikan progammer itupun jika bersatu padu membentuk komunitas yg rukun dan kompak….chayo!!!!

  3. Mas. Bagaimana membuat Jcheckbox dinamis untuk from misalnya untuk memilih hobi. sementara data hobinya sudah ada didatabase. jadi pilihan checkboxnya bisa bertambah dan berkurang sesuai isi database hobi

  4. Mas. Bagaiamana membuat JCheckbox dimanis pada form di java?. misalnnya checkbox untuk memilih hobi. jadi pilihan checkboxnya bisa bertambah dan berkurang sesuai dengan database hobi.

  5. Siang mas, saya berhasil mencoba tutorial ini. cuma gimana cara menghapus record yang sudah terseleksi dengan checkbos pada JTable tadi dihapus juga ditable pada database. mohon contohnya terima kasih…

  6. Halo Mas Eko,..
    misalnya program ini berjalan didatabase,
    aku masih kesulitan pada bagian method remove(),, sebaiknya ditambahin/diganti dengan script yg bagaimana??
    Programku menggunakan konsep MVC, saya masih kbingungan memanggil method delete() di class Controllernya untuk dimasukkan ke method remove()…

    Kurang Lebih ini scriptnya :

    1) Class PasienModelTable

    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.table.AbstractTableModel;
    import poliklinik.pasien.dao.Pasien;
    import poliklinik.pasien.dao.PasienDAOImpl;

    public class PasienModelTable extends AbstractTableModel {

    List list = new ArrayList();
    PasienDAOImpl pasienDAOImpl = new PasienDAOImpl();
    private Pasien barang;

    public PasienModelTable() {
    barang = new Pasien();
    list = pasienDAOImpl.getAllPasien();
    }

    public int getColumnCount() {
    return 9;
    }

    public int getRowCount() {
    return list.size();
    }

    @Override
    public String getColumnName(int column) {
    switch (column) {
    case 0:
    return “NO”;
    case 1:
    return “KODE PASIEN”;
    case 2:
    return “NAMA PASIEN”;
    case 3:
    return “JENIS KELAMIN”;
    case 4:
    return “USIA”;
    case 5:
    return “AGAMA”;
    case 6:
    return “ALAMAT PASIEN”;
    case 7:
    return “TELP PASIEN”;
    case 8:
    return “HAPUS”;
    default:
    return null;
    }

    }

    public Object getValueAt(int rowIndex, int columnIndex) {
    if (rowIndex == -1) {
    return “”;
    }
    switch (columnIndex) {
    case 0:
    return rowIndex + 1;
    case 1:
    return list.get(rowIndex).getKd_pasien();
    case 2:
    return list.get(rowIndex).getNama_pasien();
    case 3:
    if (list.get(rowIndex).getJk() == 0) {
    return “Laki-laki”;
    }
    return “Perempuan”;
    case 4:
    return list.get(rowIndex).getUsia();
    case 5:
    return list.get(rowIndex).getAgama();
    case 6:
    return list.get(rowIndex).getAlamat_pasien();
    case 7:
    return list.get(rowIndex).getTelp_pasien();
    case 8:
    return list.get(rowIndex).isHapus();
    default:
    return null;
    }
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
    if (columnIndex == 8) {
    return true;
    } else {
    return false;
    }
    }

    @Override
    public Class getColumnClass(int columnIndex) {
    if (columnIndex == 8) {
    return Boolean.class;
    } else {
    return super.getColumnClass(columnIndex);
    }
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    if (aValue != null && aValue instanceof Boolean && columnIndex == 8) {
    boolean delete = (Boolean) aValue;
    list.get(rowIndex).setHapus(delete);
    }
    }

    public void remove() {
    List barangs = new ArrayList();
    for (Pasien barang : list) {
    if (!barang.isHapus()) {
    barangs.add(barang);
    }
    }
    list = barangs;
    fireTableDataChanged();
    }

    public void setList(List list) {
    this.list = list;
    }

    public Pasien set(int index, Pasien element) {
    try {
    return list.set(index, element);
    } finally {
    fireTableRowsUpdated(index, index);
    }
    }

    public Pasien remove(int index) {
    try {
    return list.remove(index);
    } finally {
    fireTableRowsDeleted(index, index);
    }
    }

    public Pasien get(int index) {
    return list.get(index);
    }

    public boolean add(Pasien e) {
    try {
    return list.add(e);
    } finally {
    fireTableRowsInserted(getRowCount() – 1, getRowCount() – 1);
    }
    }
    }

    2) Class Controller ->Method delete()

    public void prosesDeletePasien(Pasien pasien) {
    processUpdateKd_Pasien(pasien.getKd_pasien().trim());
    processUpdateNama_Pasien(pasien.getNama_pasien().trim());
    processUpdateJk(pasien.getJk());
    processUpdateUsia(pasien.getUsia());
    processUpdateAgama(pasien.getAgama().trim());
    processUpdateAlamat_Pasien(pasien.getAlamat_pasien().trim());
    processUpdateTelp_Pasien(pasien.getTelp_pasien().trim());
    //model=class model
    model.deletePasien();
    }

    3) Class Model->methode deletePasien()

    public void deletePasien() {
    Pasien pasien = new Pasien();
    pasien.setKd_pasien(getKd_pasien());
    pasien.setNama_pasien(getNama_pasien());
    pasien.setJk(getJk());
    pasien.setUsia(getUsia());
    pasien.setAgama(getAgama());
    pasien.setAlamat_pasien(getAlamat_pasien());
    pasien.setTelp_pasien(getTelp_pasien());

    // pasienDAO = instansiasi dari kelas DOAImpl(tempat query delete berada)
    pasienDAO.deletePasien(pasien);
    fireModelChangeEvent(pasien);
    }

    MOhon bantuannya n pencerahaannya ya mas,,,
    Trima kasih byk…

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s