Digg StumbleUpon LinkedIn YouTube Flickr Facebook Twitter RSS Reset

Exemple de Filtrage d’une JListe

Ce Code permet de filtrer un composant JList. Le code ignore la casse

 
import javax.swing.*;
import java.awt.*;
import java.util.*;
import javax.swing.event.*;
/**
 *
 * @author Administrateur
 */
public class FilteredJList extends JList {
 
    private FilterField filterField;
    private int DEFAULT_FIELD_WIDTH = 20;
 
    public FilteredJList() {
        super();
        setModel (new FilterModel());
        filterField = new FilterField (DEFAULT_FIELD_WIDTH);
 
    }
 
    public void setModel (ListModel m) {
        if (! (m instanceof FilterModel))
            throw new IllegalArgumentException();
        super.setModel (m);
    }
 
    public void addItem (Object o) {
        ((FilterModel)getModel()).addElement (o);
    }
 
    public JTextField getFilterField() {
        return filterField;
    }
 
class FilterModel extends AbstractListModel {
            ArrayList items;
            ArrayList filterItems;
            public FilterModel() {
               super();
               items = new ArrayList();
               filterItems = new ArrayList();
            }
            public Object getElementAt (int index) {
               if (index < filterItems.size())
                   return filterItems.get (index);
               else
                  return null;
            }
            public int getSize() {
                return filterItems.size();
            }
			public void addElement (Object o) {
             items.add (o);
             refilter();
 
         }
       private void refilter() {
           filterItems.clear();
           String term = getFilterField().getText().toLowerCase();
           for (int i=0; i<items.size(); i++)
               if (items.get(i).toString().toLowerCase().indexOf(term, 0) != -1)
                   filterItems.add (items.get(i));
           fireContentsChanged (this, 0, getSize());
         }
     }
class FilterField extends JTextField implements DocumentListener {
   public FilterField (int width) {
       super(width);
getDocument().addDocumentListener (this);
    }
    public void changedUpdate (DocumentEvent e) {
       ((FilterModel)getModel()).refilter();
    }
    public void insertUpdate (DocumentEvent e) {
       ((FilterModel)getModel()).refilter();
    }
    public void removeUpdate (DocumentEvent e) {
       ((FilterModel)getModel()).refilter();
    }
}
public static void main (String[] args) {
    String[] listItems = {
        "Janvier", "Février", "Mars", "Juillet",
        "Juin", "Mai", "Avril", "Aout"
    };
    JFrame frame = new JFrame ("Filtrage d'une JListe");
    frame.getContentPane().setLayout (new BorderLayout());
    FilteredJList list = new FilteredJList();
    for (int i=0; i<listItems.length; i++)
        list.addItem (listItems[i]);
    JScrollPane pane =
        new JScrollPane (list,
                         ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                         ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    frame.getContentPane().add (pane, BorderLayout.CENTER);
    frame.getContentPane().add (list.getFilterField(),
                                BorderLayout.NORTH);
    frame.pack();
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
 
 
}

A Voir sur le même Sujet:

  • modèle jlist abstractlistmodel listmodel
  • swing exemples filtrage
  • JTable FilteredJList
  • jscrollpane java pdf
  • exemple de fenetre en java qui contient une liste de filtres
  • filtre jabva
  • drag and drop entre deux jlist
  • java.mesexemples.com+jliste
  • comment ajouter jtextfield a la rectangle en java
  • jliste