Selasa, 28 Agustus 2012

Adding Check Box in Cell Table

Pengen nambah catatan lagi mengenai JTable. Kali ini pengen nambahin gimana caranya insert checkbox di cell JTable. Untuk nambahin checkbox, caranya cukup mudah. Pada cell tertentu ganti saja dengan object Boolean, maka akan di render menjadi checkbox. Lansung aja ke code ya.

public class TableFieldModel extends AbstractTableModel {

    String[] colom = {"Field", "Value", "Action"};
    FieldModel fm = new FieldModel("", "", false);
    List<FieldModel> lfm = new ArrayList<FieldModel>();

    public TableFieldModel() {
        lfm.add(fm);
    }

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

    public int getColumnCount() {
        return colom.length;
    }

    @Override
    public String getColumnName(int col) {
        return colom[col];
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return lfm.get(rowIndex).getField();
            case 1:
                return lfm.get(rowIndex).getValue();
            case 2:
                return lfm.get(rowIndex).getStatus();
        }
        return null;
    }

    /*
     * JTable uses this method to determine the default renderer/
     * editor for each cell.  If we didn't implement this method,
     * then the last column would contain text ("true"/"false"),
     * rather than a check box.
     */
    @Override
    public Class getColumnClass(int columnIndex) {
        return getValueAt(0, columnIndex).getClass();
    }

    @Override
    public void setValueAt(Object val, int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0 :lfm.get(rowIndex).setField(val.toString());
            break;
            case 1 : lfm.get(rowIndex).setValue(val.toString());
            break;
            case 2 : lfm.get(rowIndex).setStatus((Boolean)val);
            break;
        }
        
        fireTableCellUpdated(rowIndex, columnIndex);
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return true;
    }

    public void addRow() {
        System.out.println("Add row");
        lfm.add(new FieldModel("", "", false));
        fireTableDataChanged();
    }

    public void removeRow() {
        if (getRowCount() != 0) {
            lfm.remove(getRowCount() - 1);
            fireTableDataChanged();
        } else {
            JOptionPane.showMessageDialog(null, "Upps, row is zero!!");
        }
    }
}

class FieldModel {

    String field;
    String value;
    Boolean status;

    public FieldModel(String fld, String vl, boolean st) {
        field = fld;
        value = vl;
        status = new Boolean(st);
    }

    public String getField() {
        return field;
    }

    public String getValue() {
        return value;
    }

    public Boolean getStatus() {
        return status;
    }

    public void setField(String fld) {
        field = fld;
    }

    public void setValue(String vl) {
        value = vl;
    }

    public void setStatus(boolean st) {
        status = st;
    }
}

Pada kode di atas, kita buat 2 class. Satu class yang digunakan sebagai isi table yaitu class FieldModel dan yang satu lagi sebagai model dari JTable yaitu TableFieldModel. Class TableFieldModel ini digunakan untuk menentukan seperti apa JTable yang kita inginkan.
Jika sudah dibuat table model nya maka kita setmodel tersebut di JTable. Misalnya sepeti ini

.........................................................................,,,,,,,,,,,,,,,,
....................................................................,,,,,,,,,,,,,,,,,,,,,,
TableFieldModel tblModel = new TableFieldModel();

JTable tbl = new JTable();
tbl.setModel(tblModel);
.....................................................................,,,,,,,,,,,,,,,,,,,,,
............................,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

Maka tampilannya akan seperti ini


Perlu diketahui, agar JTable dapat merender checkbox. Maka kita perlu memperhatikan fungsi getColumnClass.

Sekian postingan tentang checkbox di JTable. Untuk lebih lengkapnya silahkan search google :D

Wassalam :)

1 komentar: