⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filteredjlist.java

📁 《SWING HACKS》源码 作者: Joshua Marinacci,Chris Adamson 著 徐晔 译 出版: 2007年2月
💻 JAVA
字号:
import java.awt.*;import javax.swing.event.*;import javax.swing.*;import java.util.ArrayList;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;    }    // test filter list    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);    }    // inner class to provide filtered model    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());        }    }    // 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(); }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -