В поисках автозаполнения в одну строку, я нашел код здесь и там и, наконец, использовал этот
public class AutoCompleteDocument extends PlainDocument {
private final List<String> dictionary = new ArrayList<String>();
private final JTextComponent jTextField;
public AutoCompleteDocument(JTextComponent field, String[] aDictionary) {
jTextField = field;
dictionary.addAll(Arrays.asList(aDictionary));
}
@Override
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);
jTextField.setCaretPosition(offs + str.length());
jTextField.moveCaretPosition(getLength());
}
}
public String autoComplete(String text) {
for (Iterator<String> i = dictionary.iterator(); i.hasNext();) {
String word = i.next();
if (word.startsWith(text)) {
return word.substring(text.length());
}
}
return null;
}
}
Тогда я использую это как
autoCompleteDoc = new AutoCompleteDocument(myTextField,myDictionary);
myTextField.setDocument(autoCompleteDoc);
Все отлично работает.
Моя проблема заключается в следующем:
В myTextField есть прослушиватель actionPerformed, поэтому при нажатии клавиши ввода выполняется некоторая обработка.
К сожалению, мне хотелось бы, чтобы текст был «предложен» (выделен), когда я нажимаю клавишу ввода, он подтверждает предложение, поэтому я могу продолжать вводить текст и только тогда, когда текст не предлагается (без выделения), а затем нажимать клавишу ввода делает мою обработку.
Я просто застрял без понятия, с чего начать.
Кто-нибудь может мне помочь?