JTable, JComboBox dan JList adalah komponen swing yang masing-masing memiliki Model. Model dari ketiga komponen tersebut membutuhkan collection untuk menyimpan data, hal ini jelas logis karena ketiga komponen tersebut menampilkan data yang jamak, tidak data tunggal. Library GlazedLists menyediakan class model yang mengimplement masing-masing model dari ketiga komponen tersebut dan menggunakan EventList sebagai collection dari model-model tersebut.
EventListModel
EventListModel mengimplement interface ListModel dan menerima EventList sebagai argumen dari constructornya. Dengan mudah kita dapat menggunakan EventListModel sebagai model untuk komponen JList.
JList menampilkan object-object di dalam model sebagai list satu dimensi, sehingga diperlukan mekanisme untuk menampilkan sebuah object dalam sebuah String. Mekanisme ini disediakan oleh method toString dari class Object, kita override method toString dari class Customer diatas menjadi :
public String toString() {
return id + " " + nama + " " + jenisKelamin + " " + agama + " " + status + " " + pekerjaan;
}
mengembalikan gabungan dari semua nilai dari field-field yang dipunyai oleh class Customer.
Berikut ini adalah sebuah program sederhana untuk menampilkan isi table CUSTOMER ke dalam sebuah JList menggunakan library GlazedLists. Kita akan menggunakan class DBAccess yang telah dibuat sebelumnya.
Aplikasi GlazedLists yang menampilkan Customer dalam JList Untuk membuat aplikasi diatas lakukan langkah-langkah berikut : 1. Buat sebuah class JFrame, beri nama CustomersList.java
2. Tambahkan komponen JList ke dalam CustomersList, beri nama listCustomers.
3. Bukalah Jendela Code dan tambahkan baris kode ini ke dalam class constructor class CustomersList di bagian bawah dari baris pemanggilan method initComponent :
try { EventList<Customer> list = DBAccess.getCustomers(); EventListModel model = new EventListModel(list); listCustomers.setModel(model); } catch (SQLException ex) { ex.printStackTrace(); }
4. Compile dan jalankan program diatas.
Bisa kita lihat, kode diatas sangat sederhana sekali. Setelah kita mempunyai class yang bertugas untuk melakukan mapping antara table CUSTOMER dan class Customer, GlazedLists akan mempermudah pekerjaan kita menampilkannya ke dalam JList.
EventComboBoxModel
Seperti juga JList, JComboBox mempunyai karakteristik untuk menampilkan koleksi data. Sama juga seperti JList, JComboBox menggunakan method toString dari sebuah class sebagai representasi object tersebut dalam item JcomboBox.
Berikut ini contoh aplikasi sederhana untuk menampilkan isi table CUSTOMER dalam JComboBox.Menampilkan data Customer dalam JcomboBox :
Aplikasi sederhana menampilkan data customer di JComboBox Untuk membuat aplikasi diatas lakukan langkah-langkah berikut ini:
1. Buat sebuah class JFrame dan beri nama CustomersCombo 2. Letakkan sebuah JComboBox ke dalam class JFrame tersebut,
beri nama cmbCustomer.
3. Tuliskan kode berikut ini di dalam konstruktor dari class CustomersCombo di bagian bawah dari baris pemanggilan method initComponent. try { EventList<Customer> customers = DBAccess.getCustomers(); EventComboBoxModel model = new EventComboBoxModel(customers); cmbCustomers.setModel(model); cmbCustomers.setSelectedIndex(0); } catch(SQLException ex){ ex.printStackTrace(); }
4. Compile dan jalankan programnya.
Kode diatas sangat mirip dengan kode untuk menampilkan EventList ke dalam komponen JList, hal ini karena karakteristik JList dan JComboBox yang mirip, yang berbeda hanyalah behaviour dari keduanya. JComboBox hanya dapat memilih satu pilihan sedangkan JList dapat memilih lebih dari satu pilihan.
Menampilkan EventList ke dalam JTable berbeda dengan JList dan JComboBox, karena JTable memiliki struktur data tabular dimana setiap baris dibagi-bagi dalam kolom.
EventTableModel
JTable memiliki struktur data tabular dua dimensi, sedangkan EventList adalah list object satu dimensi. Memasukkan EventList dalam EventTableModel memerlukan class yang mengimplement
interface TableFormat dari GlazedLists. Interface TableFormat digunakan untuk mendefinisikan beberapa hal yang berhubungan dengan kolom dari JTable, antara lain: jumlah kolom, nama kolom, dan nilai kolom. Dengan class TableFormat ini EventList yang hanya sebuah list dapat dipandang menjadi sebuah data tabular dua dimensi.
Untuk lebih jelasnya, perhatikan class CustomerTableFormat berikut ini : public class CustomerTableFormat implements TableFormat{ public CustomerTableFormat() { } public int getColumnCount() { return 6; } public String getColumnName(int column) { switch(column){ case 0: return "Id"; case 1: return "Nama"; case 2: return "Jenis Kelamin"; case 3: return "Agama"; case 4: return "Status"; case 5: return "Pekerjaan"; default: return ""; } } public Object getColumnValue(Object baseObject, int column) { Customer customer = (Customer) baseObject; switch(column){ case 0: return customer.getId(); case 1: return customer.getNama();
case 2: return customer.getJenisKelamin(); case 3: return customer.getAgama(); case 4: return customer.getStatus(); case 5: return customer.getPekerjaan(); default: return ""; } } }
Method getColumnCount mengembalikan jumlah kolom, kemudian method getColumnName mengembalikan nama kolom, dan terakhir method getColumnValue mengembalikan nilai kolom dari baseObject. baseObject ini sebenarnya adalah 'baris' atau dalam hal ini adalah object Customer.
Kita akan membuat sebuah aplikasi kecil untuk menampilkan Customer ke dalam suatu table dengan bantuan class CustomerTableFormat yang telah kita buat sebelumnya.
Data Customer ditampilkan dalam JTable
Untuk membuat aplikasi seperti di atas lakukan langkah-langkah berikut ini :
1. Buat class JFrame baru, beri nama CustomersTable
2. Letakkan sebuah JTable dalam class CustomersTable, beri nama tblCustomers
CustomersTable di bagian bawah dari baris pemanggilan method initComponent. try{ EventList<Customer> list = DBAccess.getCustomers(); EventTableModel model = new EventTableModel(sortedList, new CustomerTableFormat()); tblCustomers.setModel(model); } catch(SQLException e){ e.printStackTrace(); }
4. Compile dan jalankan programnya
Bisa kita lihat bahwa proses menampilkan data dari database menggunakan bantuan GlazedLists sangat mudah dan mengurangi banyak sekali code yang tidak perlu. Kita juga tidak perlu membuat class yang mengimplement TableModel, karena GlazedLists sudah menyediakan EventTableModel. Tetapi tetap saja kita memerlukan sebuah class yang mengimplement TableFormat untuk mendefinisikan kolom dari tabel, untungnya mengimplement interface TableFormat lebih mudah dan sederhana dibandingkan harus mengimplement TableModel.