2015-12-28 2 views
1

Как я могу получить полный выделенный текст из автозаполнения TextField?Codename One - получить выделенный текст из автозаполнения

Если я использую getText(), я получаю только несколько букв, которые пользователь вводит до сих пор.

Пример: я пишу «Фло», а затем выберите «Цветы» из списка, но GetText() дает мне «фло»

AutoCompleteTextField auto = new AutoCompleteTextField(arrayWithNames); 
auto.setMinimumLength(4); 
auto.addListListener((ActionEvent evt1) -> { 
    String lookedFor = auto.getText(); 
    Hashtable<String,Object> match[] = findMatch(lookedFor); 
    if(hMatch.length>0){ 
     contElements.removeAll(); 
     for (Hashtable<String, Object> Match1 : match) { 
      ... 
      ...//fill the Container with the names found 
      ... 
     } 
    } 
}); 

Как это работает

Я использую Автозаполнение TF в качестве кнопки поиска. У меня есть массив со всеми именами в моем списке. Затем я заполняю Auto массивом. Пользователь выбирает имя из Авто, а затем я ищу значение, которое «lookFor» использует findMatch(). Он возвращает новый массив с найденными записями.

Мне нужно полное имя из списка, поэтому я могу использовать метод findMatch(), но когда я использую getText() из Auto, он возвращает только буквы, введенные пользователем, а не все имя, поэтому мой метод не работает, так как я сравниваю целые строки. (Я использую Авто, потому что это очень удобно, если люди помнят только часть имени, которое они ищут)

ответ

0

Я не уверен, что вы правильно используете AutoCompleteTextBox.

Вся цель коробки AutoCompleteText, чтобы помочь вам помочь пользователю в выборе из списка действительных запросов,

Вы не должны получать значения getText(), пока пользователь не готов представить форму, где AutoCompleteTB находится.

Это поможет, если вы еще не смотрели здесь: https://www.codenameone.com/javadoc/com/codename1/ui/AutoCompleteTextField.html#getPropertyTypes--

Успехов!

+0

Я сделал то, что вы упомянули на своих первых строках. Я добавил Listener в AutoComplete TF, и он вызывает метод getText(), когда я выбираю элемент из списка, но вместо того, чтобы возвращать полное выбранное значение из списка, я получаю только несколько букв, которые я нажал на клавиатуре : «hou» вместо «House», «pita» вместо «Hospital» и т. д. – Felipe

+1

'public void addListListener (ActionListener a)' Добавляет прослушиватель действий, который запускает событие, когда выбрана запись в списке автозаполнения , Обратите внимание, что этот метод будет действовать только тогда, когда всплывающее окно будет переименовано, если оно вызывается, когда всплывающее окно уже показывает его, оно не будет иметь эффекта. Это событие срабатывает, когда они выбирают элемент из ACTF, а затем модель списка перерисовывается, чтобы отразить это заметно. Внутри пользователь выбирает вход, а содержимое TextField обновляется ACTF; т.е. вы не должны делать это сами. –

+0

Другим способом было бы использовать события 'keyPress', а затем настроить переменную для переключения ключевых нажатий, чтобы определить, когда пользователь выбрал элемент автозаполнения, и определить индекс выбора пользователя, чтобы захватить автозаполнение введите текст модели из 'getCompletion()'. –

1

Если вы подклассом AutoCompleteTextField, вы можете получить доступ к выделенному тексту внутри с помощью getSuggestionModel().getItemAt(getSuggestionModel().getSelectedIndex()). Теперь вы можете определить метод getter publicgetSelectedText() или что-то в вашем производном классе.