/* * Copyright 2003-2010 Tufts University Licensed under the * Educational Community License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing * permissions and limitations under the License. */ package tufts.vue.gui; import javax.swing.text.*; import javax.swing.*; import tufts.vue.RecentlyOpenedUrlManager; import java.util.List; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; public class AutoCompleteDocument extends PlainDocument { /** * */ private static final long serialVersionUID = 1L; private List<String> dictionary = new ArrayList<String>(); private JTextComponent comp; public static String z; public AutoCompleteDocument( JTextComponent field, String[] aDictionary ) { comp = field; dictionary.addAll( Arrays.asList( aDictionary ) ); } public void addDictionaryEntry( String item ) { dictionary.add( item ); } public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { super.insertString( offs, str, a ); String word = autoComplete( getText( 0, getLength() ) ); if( word != null ) { super.insertString( offs + str.length(), word, a ); comp.setCaretPosition( offs + str.length() ); comp.moveCaretPosition( getLength() ); } } public String autoComplete( String text ) { for( Iterator i = dictionary.iterator(); i.hasNext(); ) { String word = (String) i.next(); if( word.startsWith( text ) ) { return word.substring( text.length() ); } } return null; } /** * Creates a auto completing JTextField. * * @param dictionary an array of words to use when trying auto completion. * @return a JTextField that is initialized as using an auto * completing textfield. */ public static JTextField createAutoCompleteTextField( String[] dictionary ) { JTextField field = new JTextField(); AutoCompleteDocument doc = new AutoCompleteDocument( field,dictionary ); field.setDocument(doc); return field; } public static void main(String args[]) { javax.swing.JFrame frame = new javax.swing.JFrame("foo"); frame.setDefaultCloseOperation( javax.swing.JFrame.EXIT_ON_CLOSE ); String[] dict = { "Team", "meeting", "project", "review","client","call","orginization","team" }; JTextField field = AutoCompleteDocument.createAutoCompleteTextField( dict ); BoxLayout layout = new BoxLayout( frame.getContentPane(),BoxLayout.X_AXIS ); frame.getContentPane().setLayout( layout ); frame.getContentPane().add( new javax.swing.JLabel("Text Field: ") ); frame.getContentPane().add(field); frame.show(); } }