Guest User

FilteredJList

a guest
May 13th, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.46 KB | None | 0 0
  1. public class FilteredJList extends JList {
  2.  
  3.     private FilterField filterField;
  4.     private int DEFAULT_FIELD_WIDTH = 30;
  5.  
  6.     public FilteredJList(Container container) {
  7.         super();
  8.        
  9.         setModel(new FilterModel());
  10.         filterField = new FilterField(DEFAULT_FIELD_WIDTH);
  11.         setLocale(new Locale("pt","Br"));
  12.     }
  13.  
  14.     public void setModel(ListModel m) {
  15.         if (!(m instanceof FilterModel)) {
  16.             throw new IllegalArgumentException();
  17.         }
  18.         super.setModel(m);
  19.     }
  20.  
  21.     public void addItem(Object o) {
  22.         ((FilterModel) getModel()).addElement(o);
  23.     }
  24.  
  25.     public JTextField getFilterField() {
  26.         return filterField;
  27.     }
  28.  
  29.    
  30.  
  31.     // inner class to provide filtered model
  32.     class FilterModel extends AbstractListModel {
  33.  
  34.         ArrayList items;
  35.         ArrayList filterItems;
  36.  
  37.         public FilterModel() {
  38.             super();
  39.             items = new ArrayList();
  40.             filterItems = new ArrayList();
  41.         }
  42.  
  43.         @Override
  44.         public Object getElementAt(int index) {
  45.             if (index < filterItems.size()) {
  46.                 return filterItems.get(index);
  47.             } else {
  48.                 return null;
  49.             }
  50.         }
  51.  
  52.         @Override
  53.         public int getSize() {
  54.             return filterItems.size();
  55.         }
  56.  
  57.         public void addElement(Object o) {
  58.             items.add(o);
  59.             refilter();
  60.         }
  61.  
  62.         private void refilter() {
  63.             filterItems.clear();
  64.             String term = getFilterField().getText();
  65.             for (int i = 0; i < items.size(); i++) {
  66.                 if (items.get(i).toString().indexOf(term, 0) != -1) {
  67.                     filterItems.add(items.get(i));
  68.                 }
  69.             }
  70.             fireContentsChanged(this, 0, getSize());
  71.         }
  72.     }
  73.  
  74.     // inner class provides filter-by-keystroke field
  75.     class FilterField extends JTextField implements DocumentListener {
  76.  
  77.         public FilterField(int width) {
  78.             super(width);
  79.             getDocument().addDocumentListener(this);
  80.         }
  81.  
  82.         public void changedUpdate(DocumentEvent e) {
  83.             ((FilterModel) getModel()).refilter();
  84.         }
  85.  
  86.         public void insertUpdate(DocumentEvent e) {
  87.             ((FilterModel) getModel()).refilter();
  88.         }
  89.  
  90.         public void removeUpdate(DocumentEvent e) {
  91.             ((FilterModel) getModel()).refilter();
  92.         }
  93.     }
  94. }
Add Comment
Please, Sign In to add comment