membuat TableModel untuk sebuah class menggunakan NetBeans IDE


saya pernah mendapatkan sebuah kritikan bahwa “untuk membuat sebuah table dalam java menggunakan Swing itu terlalu rumit, tidak seperti pada Delphi atau VB atau pada bahasa pemrograman visual lainnya“.

yup, memang untuk membuat sebuah tabel dalam Swing harus menggunakan model dulu, tidak seperti pada Delphi (saya bilang delphi karena kebetulan di kuliahan saya dapet delphi). lantas proses insert, update, dan deletenyapun kita harus menggunakan model tadi, tak seperti di delphi yang dapat kita hapus dari tabelnya langsung.

lantas kenapa harus serumit itu?

ya!!! gak mungkin kalo gak ada alasannya khan?

perlu diketahui kalo Swing dibuat menggunakan konsep MVC (Model View Controller), sehinnga setiap komponen terdiri dari bagian Model, bagian View, dan bagian Controller.

  • Model, merupakan bagian yang digunakan untuk menampung data
  • View, merupakan bagian untuk menampilkan data
  • Controller, merupakan bagian yang digunakan untuk proses manipulasi data.

jadi walaupun ini membuat rumit, tapi ini membuat mudah programmer dalam membuat sebuah aplikasi.

dalam kasus ini, yaitu TABEL, yang merupakan Model adalah TableModel. yang merupakan View adalah JTable. dan yang merupakan controller adalah proses insert, update, delete dan event yang digunakan oleh TableModel dan JTable.

balik lagi ke topik!!!

sekarang kita akan mencoba membuat sebuah class yang akan digunakan oleh TableModel, misal class Orang :

    import java.util.Date;

    /**
    *
    * @author usu
    */
    public class Orang {

        private String nama;
        private String jenisKelamin;
        private Date tanggalLahir;
        private String alamat;

        public Orang() {
        }

        public String getAlamat() {
            return alamat;
        }

        public void setAlamat(String alamat) {
            this.alamat = alamat;
        }

        public String getJenisKelamin() {
            return jenisKelamin;
        }

        public void setJenisKelamin(String jenisKelamin) {
            this.jenisKelamin = jenisKelamin;
        }

        public String getNama() {
            return nama;
        }

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

        public Date getTanggalLahir() {
            return tanggalLahir;
        }

        public void setTanggalLahir(Date tanggalLahir) {
            this.tanggalLahir = tanggalLahir;
        }
    }

sekarang kita buat sebuah class yang bernama TableModelOrang, yang merupakan class untuk model JTable. dan ingat class tersebut harus turunan dari interface TableModel :

    import javax.swing.table.AbstractTableModel;

    /**
    *
    * @author usu
    */
    public class TableModelOrang extends AbstractTableModel {

    public int getRowCount() {
    }

    public int getColumnCount() {
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
    }
    }

sekarang tinggal kita lengkapi class TableModelOrang diatas menjadi seperti dibawah ini :

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

    /**
    *
    * @author usu
    */
    public class TableModelOrang extends AbstractTableModel {

    // Kumpulan Data Orang
    private ArrayList data;

    public TableModelOrang() {
    // Mendeklarasikan Data
    data = new ArrayList();
    }

    // Menghapus Orang
    public Orang remove(int index) {
    Orang forReturn = data.remove(index);
    // memberi tahu bahwa ada data yang dihapus
    fireTableRowsDeleted(index, index);
    return forReturn;
    }

    // Mendapatkan Orang
    public Orang get(int index) {
    return data.get(index);
    }

    // Menambah Orang
    public boolean add(Orang e) {
    boolean forReturn = data.add(e);
    // Memberi tahu bahwa ada data yang masuk
    fireTableRowsInserted(data.size() - 1, data.size() - 1);
    return forReturn;
    }

    // Mengubah Orang
    public Orang set(int index, Orang element) {
    Orang forReturn = data.set(index, element);
    // Memberitahu bahwa ada data yang diupdate
    fireTableRowsUpdated(index, index);
    return forReturn;
    }
    // Panjang Baris
    public int getRowCount() {
    return data.size();
    }

    // Panjang Kolom
    public int getColumnCount() {
    return 4;
    }

    // Nilai untuk cell(baris, kolom)
    public Object getValueAt(int rowIndex, int columnIndex) {
    switch (columnIndex) {
    case 0:
    return data.get(rowIndex).getNama();
    case 1:
    return data.get(rowIndex).getJenisKelamin();
    case 2:
    return data.get(rowIndex).getTanggalLahir();
    case 3:
    return data.get(rowIndex).getAlamat();
    default:
    return null;
    }
    }

    // Nama Kolom pada posisi ke-?
    public String getColumnName(int column) {
    switch (column) {
    case 0:
    return "Nama";
    case 1:
    return "Jenis Kelamin";
    case 2:
    return "Tanggal Lahir";
    case 3:
    return "Alamat";
    default:
    return null;
    }
    }
    }

sekarang kita buat sebuah form yang digunakan untuk memanipulasi data. buatlah form seperti dibawah ini menggunakan NetBeans IDE:

image

keterangan :

  • untuk nama menggunakan JTextField dan nama variablenya textNama
  • untuk jenis kelamin menggunakan JComboBox dan nama variabelnya comboJenisKelamin
  • untuk tangal lahir menggunakan JSpinner dan nama variablenya spinnerTanggalLahir
  • untuk alamat menggunakan JTextArea dan nama variablenya areaAlamat
  • untuk tombol tambah nama variablenya buttonTambah
  • untuk tombol ubah nama variablenya buttonUbah
  • untuk tombol hapus nama variablenya buttonHapus
  • untuk tabel nama variablenya tableOrang

sekarang ubah nilai model comboJenisKelamin menjadi [Laki-Laki, Perempuan] :

image

image

setelah itu ubah nilai model untuk spinnerTanggalLahir menjadi Date :

image

image

setelah itu buatlah sebuah variable TableModelOrang :

image

setelah itu inisialisasikan nilai awal model tersebut sebelum pemanggilan metode initComponents(), lalu set model tersebut ke tableOrang :

image

sekarang coba jalankan, maka akan terlihat seperti ini :

image

sekarang beri ActionListener ke tombolTambah dengan cara klik kanan tombolnya lalu pilih Events -> Action -> actionPerformed:

image

    private void buttonTambahActionPerformed(java.awt.event.ActionEvent evt) {
    Orang orang = new Orang();
    orang.setNama(textNama.getText());
    orang.setJenisKelamin((String) comboJenisKelamin.getSelectedItem());
    orang.setTanggalLahir((Date) spinnerTangalLahir.getValue());
    orang.setAlamat(areaAlamat.getText());

    // menambahkan ke model
    modelOrang.add(orang);
    }

beri aksi untuk tombolUbah :

private void buttonUbahActionPerformed(java.awt.event.ActionEvent evt) {
    if (tableOrang.getSelectedRowCount() == 0) {
    // Data Table tak ada yang terseleksi
    javax.swing.JOptionPane.showMessageDialog(this, "Silahkan Seleksi Data Tabel Dulu!");
    } else {
    Orang orang = new Orang();
    orang.setNama(textNama.getText());
    orang.setJenisKelamin((String) comboJenisKelamin.getSelectedItem());
    orang.setTanggalLahir((Date) spinnerTangalLahir.getValue());
    orang.setAlamat(areaAlamat.getText());

    // Mengubah Data yang terseleksi
    int index = tableOrang.convertRowIndexToModel(tableOrang.getSelectedRow());
    modelOrang.set(index, orang);
    }
    }

beri aksi untuk tombolHapus :

private void buttonHapusActionPerformed(java.awt.event.ActionEvent evt) {
if (tableOrang.getSelectedRowCount() == 0) {
// Data Table tak ada yang terseleksi
javax.swing.JOptionPane.showMessageDialog(this, "Silahkan Seleksi Data Tabel Dulu!");
} else {
if (javax.swing.JOptionPane.showConfirmDialog(this, "Anda Yakin?") ==
javax.swing.JOptionPane.OK_OPTION) {
// menghapus data yang terseleksi
int index = tableOrang.convertRowIndexToModel(tableOrang.getSelectedRow());
modelOrang.remove(index);
}
}
}

sekarang coba jalankan formnya :

image

see you at next trixxx

Rock with Java!!!!!!

🙂

Iklan

37 pemikiran pada “membuat TableModel untuk sebuah class menggunakan NetBeans IDE

  1. sebelumnya kita kan membuat class TableModelOrang, nah maksud membuat variabel TableModelOrang jadi kita buat sebuah variabel :

    private TableModelOrang model;

    // dalam contruktor
    model = new TableModelOrang();

  2. Mas saya mau tanya dikit..
    Kalau ArrayList tuh sanggup nampung data seberapa?
    kalu kita mau nampung data dari sebuah tabel pd dataBase
    ke Objek ArryList apa nanti Objeknya sanggup nampungnya?

  3. ArrayList tuh sanggup buat nampung data sebanyak mungkin selama memory komputer kita sanggup buat menampungnya,

    biasanya kalo memory kita gak sanggup buat menampung data maka akan terjadi error yang namanya “OUT OF MEMORY”,

    jadi kesimpulannya ArrayList dapat menampung data sebanyak mungkin selama memory komputer sanggup menampungnya 😀

  4. mas kok saya coba ga bsa jlan ya..da yg error di perintah tableorang.setModel(modelorang);
    knpa ya mas..
    tulisan errornya kya gini mas
    E:\Java\lat3\src\dt_orang.java:174: setModel(javax.swing.table.TableModel) in javax.swing.JTable cannot be applied to (javax.swing.JTable)
    tblorang.setModel(tblorang);
    1 error
    BUILD FAILED (total time: 1 second)

    knpa ya mas

  5. Exception in thread “AWT-EventQueue-0” java.lang.RuntimeException: Uncompilable source code – cannot find symbol
    symbol : variable modelOrang
    location: class TableOrang
    at TableOrang.(TableOrang.java:21)
    at TableOrang$1.run(TableOrang.java:146)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    BUILD SUCCESSFUL (total time: 1 second)

  6. vi agi binggung niich…..
    bisa buat programnya melakukan pencarian kayak kita nyari kata di word,trus tekan control+F keluar deh form-a..kita disuruh buat itu..vi udah buat sich pake java tapi vi ga bisa menggil file.txt-a…..:(

  7. Ping balik: Belajar JaVa « WAHYU FIGHTER

  8. Ping balik: Tutorial Java dari Eko Kurniawan Khannedy « nge-WP@net

  9. bila digabungkan dengan database menggunakan class interface, tau ga caranya.

    class interface :
    public ArrayList tabelPengarang(String nama, String asal, String keterangan);

    pada class yg extend interface :

    public ArrayList tabelPengarang(String nama, String asal, String keterangan)
    {
    ArrayList hasil = new ArrayList();
    try {
    sqlTabelPengarang = connect.prepareStatement(
    “SELECT id, nama, asal, keterangan ” +
    “FROM pengarang” +
    “WHERE namaPengarang like %” + nama + “% ” +
    “and asal like %” + asal + “% ” +
    “and keterangan like %” + keterangan + “% “);
    ResultSet hasil= sqlTabelPengarang.executeQuery();
    while (hasil.next()) {
    hasilPengarang.add(hasil.getInt(“id”) + “%” +
    hasil.getString(“nama”) + “%” +
    hasil.getString(“asal”) + “%” +
    hasil.getString(“keterangan”));
    }
    } catch (SQLException se) {
    se.printStackTrace();
    }
    return hasil;
    }

    lalu pada table model saya input kan:
    final ArrayList array = interfacePengarang.tabelPengarang( nama, asal, keterangan);

    hasilnya :
    Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
    at tableModel.TableModel.(TableModel.java:42)
    at data(data.java:36)
    at menu.ActionPerformed(menu.java:376)
    at menu.access$1100(menu.java:34)
    at menu$FormListener.actionPerformed(menu.java:252)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:337)
    at javax.swing.plaf.basic.BasicMenuItemUI$Actions.actionPerformed(BasicMenuItemUI.java:1194)
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
    at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:670)
    at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
    at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
    at javax.swing.JMenuBar.processKeyBinding(JMenuBar.java:649)
    at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267)
    at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:254)
    at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2926)
    at javax.swing.SwingUtilities.processKeyBindings(SwingUtilities.java:1551)
    at javax.swing.UIManager$2.postProcessKeyEvent(UIManager.java:1464)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:714)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:969)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:841)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:668)
    at java.awt.Component.dispatchEventImpl(Component.java:4373)
    at java.awt.Container.dispatchEventImpl(Container.java:2081)
    at java.awt.Window.dispatchEventImpl(Window.java:2458)
    at java.awt.Component.dispatchEvent(Component.java:4331)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

    mana yg harus di perbaiki.
    Mohon bantuannya….

  10. wah tutorial yg bagus nech.. tapikan disitu tiap kolom panjangnya sama. gmn supaya tiap kolom panjangnya berbeda sesuka kita.? jadi panjang tiap kolom bisa kita atur2 sendiri.

  11. program di atas jalan bro?

    emg sintax ini jalan bro? emg bs getNama(), getJensiKelamin(), getTanggalLahir(), getAlamat() ???

    public Object getValueAt(int rowIndex, int columnIndex) {
    switch (columnIndex) {
    case 0:
    return data.get(rowIndex).getNama();
    case 1:
    return data.get(rowIndex).getJenisKelamin();
    case 2:
    return data.get(rowIndex).getTanggalLahir();
    case 3:
    return data.get(rowIndex).getAlamat();
    default:
    return null;

  12. Setuju sama yang di atas saya.
    emang method dari class Orang bisa di panggil sob ?

    ndak ada implements disana, jadi bagaimana nie mas echo ?
    tolong di jawab 🙂

  13. o0w…
    dah nemu masalahnya dimana sob.

    di deklarasi Arraylist masih kurang menambahkan class object Orang.

    ArrayList data;

    public TableModelOrang() {
    // Mendeklarasikan Data
    data = new ArrayList(Orang);
    }

    Thanks brother Echo.

  14. kk,,saya mau tanya,,kalau yang saya perhatikan contoh yang diberikan kk kan seperti pada yang diatas dan tutorial video membuat aplikasi swing menggunakn konsep MVC,,setiap inputan dimasukan maka data dapat langsung terlihat di JTable,,,itu dikarena pada construktor formnya
    ada method ini
    tabelIdentitas.setModel(tableIdentitasModel);(contoh pada video swing mvc)
    klo diatas contohnya
    tableorang.setModel(modelOrang),
    namun contoh diatas kan jika satu form (JFrame/JPanel)terdiri dari JTable dan form inputan,,,
    nah masalah saya jika JTable berada pada panel tersendiri dan form inputan menggunakn JDialog,, jadi ketika selesai melakukan inputan pada JDialog,maka pada JTable yang berada di panel langsung ke refresh sendri,,seperti contoh yang k2 berikan pada video swing menggunakn konsep mvc,,
    saya binggung untuk menempakan “tableorang.setModel(modelOrang),” berada pada JPanel atau JDialog,,,,mohon pencerahannya k2,,saya sudah coba untuk menempatkan “tableorang.setModel(modelOrang),” pada construktor JPanel,,,tapi tidak tampil datanya,,,mohon bantuannya k2

  15. k2 bisa minta sedikit pencerahannya,,mengenai pertanyaan diatas,,sy masih bingung dengn logikannya, sebelumnya sy ucapkan terima kasih k

  16. saya copy ke netbeans, tapi untuk syntax:
    return data.get(rowIndex).getNama();

    muncul error:
    cannot find symbol
    symbol: method getNama();

  17. Ass,wr,wb.
    bismilah

    mas mau nanyak kalo nampilin data dari tabel yang ngelink database terus ditampilin ke combo ” jadi diklik ditabel ” ini coding di tabel video saya coba yang

    cbmkat.setSelectedIndex(String.valueOf(tvideo.getValueAt(mem.getSelectedRows(), 2))); TIDAK BISA, SAYA COBA DENGAN YANG INI

    cbmkat.setSelectedItem(mem.getJenisKategori()); JUGA TIDAK BISA
    TOLONG BANTUANNYA MAS help me…..

    private void tvideoMouseClicked(java.awt.event.MouseEvent evt) {
    // TODO add your handling code here:
    if(evt.getClickCount()==2){
    int row = tvideo.getSelectedRow();
    video mem = data.get(row);
    txtkd.setText(“” + mem.getKd_video());
    txtjudul.setText(mem.getJd_video());
    // cbmkat.setSelectedIndex(String.valueOf(tvideo.getValueAt(mem.getSelectedRows(), 2))); (TIDAK TAMPIL)

    cbmkat.setSelectedItem(mem.getJenisKategori());(TIDAK TAMPIL)
    cbjenis.setSelectedItem(mem.getJenis());
    txtsutradara.setText(mem.getSutradara());
    txtproduksi.setText(mem.getProduksi());
    txtstok.setText(mem.getStok());
    }
    }

    trimakasih mas ditunggu bantuannya

    Wall,wr.wb

  18. mas saya mw tanya.
    di atas ada disebutkan menggunakan class JTable, tp kok di NetBeans saya tidak ada yg namanya JTable ya mas ??
    yg ada di NetBeans saya cuma : Java Class, Java Package, Java Interface, JPanel Form, JFrame Form, Entity Class, dan Entity Classes From Database.

    apa memang harus menggunakan JTable ?? tidak bs diganti dengan class yg lain ??

    sekedar info, saya pakai NetBeans 6.9.1

    tolong Jawabannya secepatnya ya mas.. soalnya buat tugas kuliah.. 😀
    trima kasih.

  19. terimakasih.. banyak .. materinya sangat membantu,… tapi.. masih ada yang belum saya pahami bagaimana caranya.. sortir data pada Jtabel menggunakan abtacttablemodel..
    terimaksih sebelumnya…. atas jawabanya…

  20. mau tanya… kalo di vb6, untuk komponennya ada fasilitas untuk pemberian index untuk mempermudah pemrograman. kalo pake netbeans… ada nggak fasilitas untuk itu… ? saya cari2 kok nggak bisa ya …

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