sclass AutoCompleter { void addValue(S s) {} S completeInput(S s) { ret ""; } } sclass LocalAutoCompleter { new TreeSet entries; void addValue(S s) { entries.add(s); } S completeInput(S s) { S completion = firstStartingWith(entries, s); ret completion != null ? dropPrefix(s, completion) : ""; } } static JTextField autoCompleteTextField(JTextField tf) { final new LocalAutoCompleter completer; onEnter(tf, r { completer.addValue(tf.getText()); }); /*onComponentHide(tf, r { completer.addValue(); );*/ }