package br.ufpr.c3sl.view.glossary; import java.util.ArrayList; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @SuppressWarnings("serial") public class JTextFileldCompleter extends JTextField{ private ArrayList<String> listOfWords = new ArrayList<String>(); private ArrayList<String> findedWords = new ArrayList<String>(); public JTextFileldCompleter(int witdh){ super(witdh); new Completer(); } public void setLitOflistOfWords(Object[] l){ this.listOfWords.clear(); for (int i = 0; i < l.length; i++) { this.listOfWords.add((String)l[i]); } } public Object[] getFindedWords(){ return findedWords.toArray(); } private class Completer implements DocumentListener{ private Pattern pattern; public Completer(){ getDocument().addDocumentListener(this); } private void findWords(){ Iterator<String> it = listOfWords.iterator(); pattern = Pattern.compile(getText() + ".+"); while(it.hasNext()){ String completion = it.next(); Matcher matcher = pattern.matcher(completion); if(matcher.matches()){ findedWords.add(completion); } } } private void buildListModel(){ findWords(); if(getText().length() < 1) { findedWords.clear(); findedWords.addAll(listOfWords); } CompleterNotify.getInstance().changedState(); findedWords.clear(); } public void changedUpdate(DocumentEvent e) {buildListModel();} public void insertUpdate(DocumentEvent e) {buildListModel();} public void removeUpdate(DocumentEvent e) {buildListModel();} } }