Coretanku

Tempatku Berbagi…

Bermain-main dengan tableModel

assalamu’alaikum..

Ok.. ketemu lg dengan ane… wkwkwk

pada kesempatan kali ni ane mau share apa itu AbstractTableModel.. apa? pasti udah pada kenal.. o ya bagi para master-master java tolong dikoreksi ya jika ada kesalahan, maklum ane masih dalam tahap pembelajaran.. langsung aja lah gak usah basa-basi.. πŸ˜€

AbstractTableModel merupakan sebuah kelas abstract yang digunakan sebagai TableModel dari data-data dalam jtable. sebenernya tidak hanya abstracttablemodel yang dapat digunakan, masih ada lagi defaulttablemodel.. tapi ane lebih sering menggunakan yang abstracttablemodel.

langsung ke praktiknya ja ya.

okok.

gini pertama buat project kemudian dilanjutkan dengan buat entitasnya, jadi disini ditentukan apa aja data-data yang akan digunakan, entitas di sini cuman simple aja seperti pada posting sebelumnya data yang digunakan adalah informasi mahasiswa terdiri dari id, nama, npm dan jurusan. Jadi nanti ada 4 buah variabel yang menampung data-data itu, kemudian buat setter dan getter dari masing-masing variabel itu.. (udah tau setter dan getter toh, kalo blum tau cari sendiri di google ya.. πŸ˜€ )

seperti ini ni ntar hasilnya..

	package feri.iskandar.course;

	/**
	 *
	 * @author pheerry
	 */
	public class Mahasiswa {

	    //deklarasi data-datanya
	    private int id;
	    private String nama;
	    private String npm;
	    private String jurusan;

	    //kemudian buat method setternya

	    //setter disini

	    //getter disini

	}

nah penggalan kode di atas merupakan modelnya.

Ok Lanjut… kemudian kalo udah buat satu kelas yang merupakan kelas turunan dari kelas abstract AbstractTableModel, secara default kelas AbstractTableModel punya 3 method, yaitu getRowCount, getColumnCount dan getValueAt, seperti ini ntar kode awalnya.

	public class MahasiswaTableModel extends AbstractTableModel{

	    public int getRowCount() {
		throw new UnsupportedOperationException("Not supported yet.");
	    }

	    public int getColumnCount() {
		throw new UnsupportedOperationException("Not supported yet.");
	    }

	    public Object getValueAt(int rowIndex, int columnIndex) {
		throw new UnsupportedOperationException("Not supported yet.");
	    }

	}

Kemudian oprek tu kode dan hasilnya seperti ini ni..

	public class MahasiswaTableModel extends AbstractTableModel {

	    List<Mahasiswa> list = new ArrayList<Mahasiswa>();
	    private String[] header = {"ID", "NAMA", "NPM", "JURUSAN"};

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

	    public void insert(Mahasiswa mahasiswa){
		list.add(mahasiswa);
		fireTableRowsInserted(getRowCount()-1, getRowCount()-1);
	    }

	    public void update(int index, Mahasiswa mahasiswa){
		list.set(index, mahasiswa);
		fireTableRowsUpdated(index, index);
	    }

	    public void delete(int index){
		list.remove(index);
		fireTableRowsDeleted(index, index);
	    }

	    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).getNpm();
		    case 3:
		        return list.get(rowIndex).getJurusan();
		    default:
		        return null;
		}
	    }

	    @Override
	    public String getColumnName(int column) {
		return header[column];
	    }
	}

sedikit penjelasannya ya..

1. List = digunakan untuk menampung data yang banyak karena data yang digunakan bukan data tunggal
2. String[] header = yang ini digunakan buat nampung judul table headernya.
3. method getRowCount() = yang ini digunakan untuk menentukan jumlah barisnya, maka digunakan list.size() yang bernilai jumlah data dalam list.
4. method getColumnCount() = method ini digunakan untuk menentukan jumlah kolomnya.
5. method getValueAt() = nah method ini digunakan untuk mendapatkan data dari entitas yang tadi udah dibuat. dalam method ini penggambilan data menggunakan method getter dari entitas.
6. method getColumnName() = method ini digunakan untuk mengembalikan menamai dari masing-masing kolom sesuai dengan string header di atas itu.

method insert(), get(), update() dan delete() itu yang sebagai pengontrol (controller) dari jtable. jadi ntar jika user menambah maka datanya juga akan ditampilkan begitu juga jika dihapus dan diubah.

ok.. udah to.. lanjut.

selanjutnya tinggal buat viewnya yaitu komponen yang digunakan untuk user interfacenya, buat dengan menggunakan jframe, create new Form kalo di netbeans, kemudian buat designnya seperti ini.

Udah.. kalo udah kemudian tambahkan deklarasi variabel tablemodel yang tadi udah dibuat di bawah kelas atau di atas konstruktor.

    private MahasiswaTableModel tableModel;

kemudian inisialisasi di konstruktor seperti ini dan tabelnya di set modelnya dengan tableModel itu, jadi seperti ini:

    public FormMahasiswa() {
        initComponents();

        tableModel = new MahasiswaTableModel();
        tableMahasiswa.setModel(tableModel);
    }

Udah.. lanjut..

kemudian klik ganda pada button Tambah dan kemudian edit kodenya hingga seperti ini ni.

    private void buttonTambahActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        Mahasiswa mahasiswa = new Mahasiswa();
        mahasiswa.setId(Integer.parseInt(textID.getText()));
        mahasiswa.setNama(textNama.getText());
        mahasiswa.setNpm(textNPM.getText());
        mahasiswa.setJurusan(comboJurusan.getSelectedItem().toString());

        tableModel.insert(mahasiswa);

    }

ok sedikit penjelasan.. disitu dibuat objek mahasiswa dari kelas Mahasiswa. kemudian gunakan method setter untuk mengisi masing-masing variabel pada kelas Mahasiswa dengan mengambil dari komponen-komponen yang dibuat dan juga jalankan method insert pada kelas tableModelnya.

udah.. begitu lanjutkan dengan yang button ubah dan edit kodenya seperti ini.

   private void buttonUbahActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        int index = tableMahasiswa.getSelectedRow();

        if (index == -1) return;

        Mahasiswa mahasiswa = tableModel.getMahasiswa(index);

        mahasiswa.setId(Integer.parseInt(textID.getText()));
        mahasiswa.setNama(textNama.getText());
        mahasiswa.setNpm(textNPM.getText());
        mahasiswa.setJurusan(comboJurusan.getSelectedItem().toString());

        tableModel.update(index, mahasiswa);

    }

nah kalo ini objek mahasiswanya diambil dari data yang udah ada karena cuman mau di edit, jadi inisialisasinya menggunakan method getMahasiswa di kelas tableModel. yang method getSelectedRow() itu digunakan untuk mentukan pada baris mana data yang diambil.

kemudian yang button Hapus juga dan edit, ntar hasilnya seperti ini.

    private void buttonHapusActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        int index = tableMahasiswa.getSelectedRow();

        if (index == -1) return;

        tableModel.delete(index);
    }

kemudian pada table beri aksi jika di klik biar datanya pada text-text dapat berubah, sintaknya seperti ini.

   private void tableMahasiswaMouseClicked(java.awt.event.MouseEvent evt) {
        // TODO add your handling code here:
        if(evt.getClickCount()==1){
            int index = tableMahasiswa.getSelectedRow();

            if(index==-1) return;

            Mahasiswa mahasiswa = tableModel.getMahasiswa(index);

            textID.setText(String.valueOf(mahasiswa.getId()));
            textNPM.setText(mahasiswa.getNpm());
            textNama.setText(mahasiswa.getNama());
            comboJurusan.setSelectedItem(mahasiswa.getJurusan().toString());

        }
    }

Udah deh buatnya, kelar dan program udah dapat dijalankan tekan tombol Shift+F6 dan binggo…. program udah jalan,, kemudian coba diisi teksnya dan pilih combo box-nya kemudian teken Tambah maka di table akan tambil datanya.. untuk edit pilih dulu datanya pada table kemudian baru di edit.

hasilnya seperti ini nih..

Gimana muantap to… πŸ˜€ o ya untuk download dapat dari sini.

sekian aja ya..semoga bermanfaat. amiin

wassalamu’alaikum wr. wb.

Leave a comment