Jumat, 21 September 2012

TableModel

TableModel adalah class model yang paling sering dikustomisasi. Karakteristik data dari JTable yang berbentuk koleksi data dua dimensi membutuhkan perhatian khusus agar efisien digunakan dalam aplikasi. Jika kita tidak hati-hati, maka aplikasi kita bisa menjadi sangat lambat dan tidak efisien.

TableModel adalah interface yang digunakan oleh JTable untuk mendefinisikan ciri-ciri dari data tabular yang akan ditampilkan oleh JTable. Misalnya : jumlah kolom, nama kolom, class dari object dalam kolom, jumlah baris dan nilai setiap cell. Dengan adanya data-data ini JTable dapat secara efisien menentukan bagaimana menampilkan data tersebut.

Berikut ini adalah kode untuk menampilkan koleksi object Person. Class ArrayList<Person> adalah implementasi dari generics, konsep dalam Java yang digunakan untuk mendefinisikan isi dari koleksi. ArrayList<Person> artinya adalah membuat sebuah object koleksi ArrayList yang harus diisi oleh object Person dan tidak bisa diisi oleh object lainya, misalnya String.

public class PersonTableModel extends AbstractTableModel{
private List<Person> persons;
public PersonTableModel(List<Person> persons) {
this.persons = persons;
}
public int getRowCount() {
return persons.size();
}
public int getColumnCount() {
return 3;
}
public Object getValueAt(int rowIndex, int
columnIndex) {
Person p = persons.get(rowIndex);
switch(columnIndex){
case 0 : return p.getId();
case 1 : return p.getName();
case 2 : return p.getEmail();
default : return "";
}
}


@Override
public String getColumnName(int column) {
switch(column){
case 0 : return "ID";
case 1 : return "NAME";
case 2 : return "EMAIL";
default : return "";
}
}
}

Yang perlu diperhatikan bahwa dalam AbstracTableModel, method isCellEditable selalu mengembalikan nilai false, artinya semua cell tidak dapat diedit. Kemudian method setValueAt adalah method kosong belaka, artinya jika kita memanggil method ini tidak akan terjadi apa-apa.

Class kedua adalah DefaultTableModel yang telah mengimplementasi semua method abstract dari interface
TableModel. Representasi data DefaultTableModel menggunakan dua jenis data tabular, yaitu array dua dimensi, Object[][], dan Vector dari Vector, Vector<Vector<Object>>. Jika kita mempunyai struktur data selain kedua jenis tersebut kita harus melakukan konversi data ke dalam salah satu bentuk struktur data tersebut. Cara yang lebih cerdas adalah mendefinisikan sendiri class yang mengimplement interface TableModel seperti class CustomerTableModel diatas.

Setelah TableModel selesai didefinisikan kita tinggal memanggil method setTableModel dari object JTable, atau membuat object JTable baru menggunakan constructor yang menerima argumen TableModel. Contohnya seperti potongan kode di bawah ini :

JTable table = new JTable(new DefaultTableModel());
JTable table1 = new JTable();
table1.setModel(new DefaultTableModel());

1 komentar:

  1. bro, mau tanya...
    kalau penggunaan java I/O untuk kejadiaan apa dalam membuat aplikasi ??
    bls

    BalasHapus