Tutorial : Membuat Filter List lebih mudah dengan SwingX

Oke, hari ini saya akan membahas cara membuat Filter List dengan menggunakan fitur-fitur atau class-class yang ada di SwingX. Saya rasakan dahulu saat pertama kali belajar java, sangat kesulitan untuk membuat Filter List ini. Pernah juga saya searching di Internet dan mendapatkan contoh yang implementasinya lumayan rumit, apalagi dengan keadaan pada saat itu yang masih awam dengan java. Maka dari itu saya akan menjelaskan bagaimana sih, atau ada gak ya cara yang lebih mudah ? Jawaban simple nya ada dan caranya sangat mudah. Jika kalian belum punya library atau jar file SwingX ini kalian silahkan lihat di Tutorial saya sebelumnya yaitu Tutorial : Menggambar di JPanel lebih mudah. Jika sudah punya silahkan lanjut kebagian berikutnya.


Sebelum saya menuliskan source code saya akan mencoba mengulas sedikit mengenai apa sih Filter List. Filter List merupakan teknologi atau alat yang fungsinya memfilter atau menyaring data yang ada di List, JList atau JXList. Bentuk sederhananya dengan menggunakan JTextfield atau JXTextfield dan JXList tentunya, ketika kita mengetikan sesuatu di TextField tersebut maka otomatis data yang ada di List menjadi tersaring ataupun berkurang. Jika penjelasan tadi membingungkan silahkan lihat di gambar dibawah ini.

Untuk menghasilkan seperti pada gambar tersebut kita membutuhkan class JXList, JTextfield, RowFilter, dan lain sebagainya. Silahkan kalian lihat dan pelajari.

package org.motekar.latihan.swingX;

import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.RowFilter;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.DefaultListModel;
import javax.swing.ListModel;
import org.jdesktop.swingx.JXList;

/**
 *
 * @author Muhamad Wibawa
 */
public class FilterListExample extends JFrame {
    
    private JXList list= new JXList();
    private static String[] peopleName = new String[]{"Adam Barclay",
        "Aleksandras Novikovas", "Bill Snyder", "Bryan Young",
        "Dan Leuck", "Daniel Lewis", "Daniel Olivera",
        "David Bolsover", "David Hall", "Diego Gil",
        "Dirk Hillbrecht", "Doug Berkland",
        "Erik Vickroy", "Fred Lavigne",
        "Gilles Philippart", "Haris Peco",
        "Jan Bosenberg", "James Morgan",
        "Jeanette Winzenburg", "Mario Cesar",
        "Mark Davidson", "Mark Fortner", "Mark Thornton",
        "Matt Nathan", "Michael Bush", "Michael Swindle",
        "Neil Weber", "Nicola Ken Barozzi", "Noel Grandin",
        "Oleg Minukhin", "Patrick Gotthardt", "Patrick Wright",
        "Pierre Le Lannic", "Ray Turnbull", "Ricardo Lopes",
        "Richard Bair", "Richard Osbaldeston", "Robert Eden", "Robert Stone",
        "Ronald Tetsuo Miura", "Salvan Haas", "Scott Delap",
        "Sean McNamara", "Simon Morris", "Shai Almog",
        "Thomas Bierhance", "Wade Chandler", "Waldemar Klaczynski",
        "Walter Wang", "Xavier Hanin", "Yannick Menager"};
    
    private JTextField fieldSearch = new JTextField();
    
    public FilterListExample() {
        construct();
    }
    
    private void construct() {
       
        fieldSearch.getDocument().addDocumentListener(new DocumentListener() {
            
            public void insertUpdate(DocumentEvent e) {
                filter();
            }
            
            public void removeUpdate(DocumentEvent e) {
                filter();
            }
            
            public void changedUpdate(DocumentEvent e) {
                filter();
            }
        });

        
        fillListData();
        
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setAutoCreateRowSorter(true);
        
        JScrollPane scPane = new JScrollPane();
        scPane.setViewportView(list);
        
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.setBorder(new EmptyBorder(10, 10, 10, 10));
        panel.add(fieldSearch, BorderLayout.NORTH);
        panel.add(scPane, BorderLayout.CENTER);
        
        this.setTitle("Filter List Examples");
        this.setPreferredSize(new Dimension(500, 500));
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(panel, BorderLayout.CENTER);
        
        
        
    }
    
    public void filter() {
        list.setRowFilter(new RowFilter<ListModel, Integer>() {

            @Override
            public boolean include(Entry<? extends ListModel, ? extends Integer> entry) {
                return entry.getStringValue(entry.getIdentifier()).toLowerCase().contains(fieldSearch.getText().toLowerCase());
            }
        });
    }
    
    private void fillListData() {
        DefaultListModel model = new DefaultListModel();

        for (String p : peopleName) {
            model.addElement(p);
        }
        list.setModel(model);
    }
    
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame test = new FilterListExample();
                test.pack();
                test.setLocationRelativeTo(null);
                test.setVisible(true);
            }
        });
    }
}

Silahkan dicoba dan semoga bermanfaat, jika masih ada pertanyaan silahkan komentar atau kalian dapat mengirim e-mail ke : wibawamw@gmail.com

Wassalam,
Muhamad Wibawa

Tablet Android Honeycomb Terbaik Murah