Membuat JTable Dengan Filter






/*
 *  DILARANG MENGUBAH ATAU MENGHAPUS HAK CIPTA INI.
 * 
 *  Hak Cipta 2008 Eko Kurniawan Khannedy.
 * 
 *  Semua isi dalam file ini adalah hak milik dari Eko Kurniawan Khannedy.
 *  Anda tak diperkenankan untuk menggunakan file atau mengubah file ini
 *  kecuali Anda tidak menghapus atau merubah hak cipta ini.
 * 
 *  Pemilik tidak bertanggung jawab jika Anda menyalah gunakan file ini
 *  dan Pemilik TIDAK MENJAMIN apapun atas file ini.
 * 
 *  Anda bisa menghubungi pemilik hak cipta ini di :
 *  email : echo.khannedy@gmail.com
 *  blog : https://eecchhoo.wordpress.com/
 *  ym : echo_khannedy
 */
package eecchhoo.demo.swing;

import java.awt.BorderLayout;
import java.util.regex.PatternSyntaxException;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

/**
 * @author echo
 */
public class FilterTable extends javax.swing.JFrame {

    /**
     * Serial Verion UID
     */
    private static final long serialVersionUID = -2093871956519605230L;

    private JScrollPane scrollpaneTable;

    private JTable tableData;

    private JTextField textFIlter;

    private DefaultTableModel modelTabel;

    private TableRowSorter sorter;

    /**
     * Metode utama
     *
     * @param args
     * parameter comand line atau shell
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                FilterTable inst = new FilterTable();
                inst.setLocationRelativeTo(null);
                inst.setVisible(true);
            }
        });
    }

    /**
     * Membuat SortedTable baru
     */
    public FilterTable() {
        super();
        initGUI();
    }

    /**
     * Metode ini digunakan untuk pendeklarasian seluruh komponen GUI yang
     * berinteraksi dengan Frame
     */
    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            getContentPane().add(getScrollpaneTable(), BorderLayout.CENTER);
            getContentPane().add(getTextFIlter(), BorderLayout.NORTH);
            pack();
            this.setSize(485, 395);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Metode ini digunakan untuk mendeklarasikan scrollpane tabel
     *
     * @return JScrollPane scrollpane table
     */
    private JScrollPane getScrollpaneTable() {
        if (scrollpaneTable == null) {
            scrollpaneTable = new JScrollPane();
            scrollpaneTable.setViewportView(getTableData());
        }
        return scrollpaneTable;
    }

    /**
     * Metode ini digunakan untuk mendeklarasikan tabel data
     *
     * @return JTable tabel data
     */
    private JTable getTableData() {
        if (tableData == null) {
            tableData = new JTable(getModelTable());
            tableData.setRowSorter(getRowSorter());
        }
        return tableData;
    }

    /**
     * Metode ini digunakan untuk mendeklarasikan TableModel
     *
     * @return DefaultTableModel model
     */
    private DefaultTableModel getModelTable() {
        if (modelTabel == null) {
            modelTabel = new DefaultTableModel();
            modelTabel.addColumn("Project");
            modelTabel.addColumn("Vendor");
            for (int i = 0; i < 25; i++) {
                modelTabel.addRow(new Object[]{
                            "NetBeans", "Sun Microsystem"
                        });
                modelTabel.addRow(new Object[]{
                            "Eclipse", "IBM"
                        });
                modelTabel.addRow(new Object[]{
                            "JBuilder", "Bordland"
                        });
                modelTabel.addRow(new Object[]{
                            "Visual J#", "Microsoft"
                        });
            }
        }
        return modelTabel;
    }

    /**
     * Metode ini digunakan untuk mendeklarasikan textfield filter
     *
     * @return JTextField filter
     */
    private JTextField getTextFIlter() {
        if (textFIlter == null) {
            textFIlter = new JTextField();
            textFIlter.getDocument().addDocumentListener(new DocumentListener() {

                @Override
                public void changedUpdate(DocumentEvent e) {
                    if (textFIlter.getText().length() <= 0) {
                        getRowSorter().setRowFilter(null);
                    } else {
                        try {
                            getRowSorter().setRowFilter(RowFilter.regexFilter(textFIlter.getText()));
                        } catch (PatternSyntaxException t) {
                            System.err.println(t.getMessage());
                        }
                    }
                }

                @Override
                public void insertUpdate(DocumentEvent e) {
                    changedUpdate(e);
                }

                @Override
                public void removeUpdate(DocumentEvent e) {
                    changedUpdate(e);
                }
            });
        }
        return textFIlter;
    }

    /**
     * Metode ini digunakan untuk mendeklarasikan sorter table
     *
     * @return TableRowSorter sorter tabel
     */
    private TableRowSorter getRowSorter() {
        if (sorter == null) {
            sorter = new TableRowSorter(getModelTable());
        }
        return sorter;
    }
}
[/sourcecode]
Iklan

16 pemikiran pada “Membuat JTable Dengan Filter

  1. Kemampuan table filter ini hanya ada pada java versi 6, jadi kalo bytea menggunakan java versi 5 kebawah, maka tak akan jalan. trus yang jangan sampai lupa save code diatas dengan nama file “FilterTable.java” 🙂

  2. Ping balik: Belajar JaVa « WAHYU FIGHTER

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

  4. duh PI pke Netbeans pdhl bru bljr java..

    mas eko ane butuh tutorial Jtable yg konek database pk XAMPP
    trus bikin table model yg ideal tuk smua tipe data.
    trus bisa simpan, edit, delete

    krn prnah tablemodel yg sy pake , nampilin data brtipe DATE salah..
    hrsnya tgl skrg..munculnya malah tgl default 1 januari 1970
    pdhl di database bener.

    he…
    tolong y..
    maaf klo requestny kbnykn..

  5. Lah kalau misalkan kita ketik di TextField misalkan ketik yang mau di cari “Eko” muncul serentetan nama :
    1.Eko Mahmudin
    2. Eko Prastyo
    3. Eko Geroge
    4. Eko Mukti
    5. Eko Khannedy

    di Table gimana mas caranya , kalau di Delphi mudah kalau di Java gimana… ?? , Aku benar bingung

  6. salam kenal maz.. sy mw nanya neh..
    saya punya tabel DB gini:
    siswa
    nis | nama_siswa
    1 nama satu
    2 nama dua

    mapel
    kode | nama_mapel
    mtk matematika
    bind bahasa

    nilai
    nis | kode_mapel | nilai
    1 mtk 7.00

    sy pengen nampilkan spt ini misal dipilih matematika
    nis | kode_mapel | nilai
    1 mtk 7.00
    2 mtk

    selama ini saya menggunakan query untuk menampilkan semua nilai nis kemudian untuk menampilkan nilai saya Looping sepanjang baris tabel..
    mohon petunjuk untuk cara yang lebih simple..
    terima kasih…

  7. Salam kenal, Mas. Saya banyak belajar dari tulisan dan videonya. Terimakasih.
    Mas saya mau tanya, kalau pada jTable saya menggunakan baris pertama untuk memasukkan parameter untuk memfilter data yang ada bisa tidak ? Terima kasih.

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