根据输入数据来过滤选项的列表框,过滤列表框,public class
分享于 点击 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
用户点评