欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

根据输入数据来过滤选项的列表框,过滤列表框,public class

来源: javaer 分享于  点击 23146 次 点评:217

根据输入数据来过滤选项的列表框,过滤列表框,public class


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();           for (int i=0; i<items.size(); i++)               if (items.get(i).toString().indexOf(term, 0) != -1)                    filterItems.add (items.get(i));                       fireContentsChanged (this, 0, getSize());         }     }     // FilterField inner class listed below// inner class provides filter-by-keystroke field 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 = {        "Chris", "Joshua", "Daniel", "Michael",        "Don", "Kimi", "Kelly", "Keagan"    };    JFrame frame = new JFrame ("FilteredJList");    frame.getContentPane().setLayout (new BorderLayout());    // populate list    FilteredJList list = new FilteredJList();    for (int i=0; i<listItems.length; i++)        list.addItem (listItems[i]);    // add to gui    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.setVisible(true);}}//该片段来自于http://byrx.net
相关栏目:

用户点评