incrementalsearch.java

来自「oraily的Swing hacks code」· Java 代码 · 共 78 行

JAVA
78
字号
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.text.*;import java.util.regex.*;public class IncrementalSearch implements DocumentListener, ActionListener {    protected JTextComponent content;    protected Matcher matcher;    public IncrementalSearch(JTextComponent comp) {        this.content = comp;    }        /* DocumentListener implementation */    public void insertUpdate(DocumentEvent evt) {        runNewSearch(evt.getDocument());    }    public void removeUpdate(DocumentEvent evt) {        runNewSearch(evt.getDocument());    }    public void changedUpdate(DocumentEvent evt) {        runNewSearch(evt.getDocument());    }        /* ActionListener implementation */    public void actionPerformed(ActionEvent evt) {        continueSearch();    }        private void runNewSearch(Document query_doc) {        try {            String query = query_doc.getText(0,query_doc.getLength());            Pattern pattern = Pattern.compile(query);            Document content_doc = content.getDocument();            String body = content_doc.getText(0,content_doc.getLength());            matcher = pattern.matcher(body);            continueSearch();        } catch (Exception ex) {            p("exception: " + ex);            ex.printStackTrace();        }    }        private void continueSearch() {        if(matcher != null) {            if(matcher.find()) {                content.getCaret().setDot(matcher.start());                content.getCaret().moveDot(matcher.end());                content.getCaret().setSelectionVisible(true);            }        }    }                        public static void main(String[] args) {        JTextArea text_area = new JTextArea(10,20);        JScrollPane scroll = new JScrollPane(text_area);        IncrementalSearch isearch = new IncrementalSearch(text_area);        JTextField search_field = new JTextField();        search_field.getDocument().addDocumentListener(isearch);        search_field.addActionListener(isearch);                JFrame frame = new JFrame("Incremental Search Hack");        frame.getContentPane().add("North",search_field);        frame.getContentPane().add("Center",scroll);        frame.pack();        frame.show();    }        public static void p(String str) {        System.out.println(str);    }}

⌨️ 快捷键说明

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