Как сделать текстовое поле для поиска (с советами, как поиск в Google)
Я хочу сделать оконное приложение для ПК, используя Java Swing. Я хотел бы сделать текстовое поле там. При наборе текста в этом текстовом поле мне нужно, чтобы показать подсказки под этим текстовым полем. И пользователь может выбрать нужный текст из списка. То же самое, что поиск в Google делает в браузере. Поэтому мне нужны две функции, первая из которых проста: отфильтровать набор строк по уже набранному тексту. Но как показать их в списке?
РЕДАКТИРОВАТЬ1: мне нужно, чтобы список отображался, если есть что показать после фильтрации, и возможность выбирать с помощью клавиш вверх и вниз. Так же, как поиск в Google, но в приложении для ПК.
3 ответа
JComboBox
это общий выбор для этого. AutoCompleteJComboBoxer
это тот, который я пробовал.
Я предлагаю вам добавить DocumentChangeListener в ваш JTextField для мониторинга вставленных / удаленных / обновленных символов:
JTextField textField = new JTextField;
textField.addDocumentListener (new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
}
public void removeUpdate(DocumentEvent e) {
}
public void insertUpdate(DocumentEvent e) {
}
}
);
Посмотрите этот урок.
Поэтому мне нужны две функции, первая из которых проста: отфильтровать набор строк по уже набранному тексту.
Теперь, когда у вас есть напечатанный текст, отфильтруйте ваш набор строк. Будьте осторожны при выборе эффективного способа хранения и извлечения строк из вашей структуры данных. С сортировкой большого количества строк это может быть не тривиальным. (Я думаю, что это будет трудно с ArrayList, если вы установите строки, если они достаточно велики.)
Но как показать их в списке?
Я думаю, что вы могли бы использовать JLabel. В качестве альтернативы вы можете попробовать с JComboBox, реализующим вашу собственную ComboBoxModel. Я не знаю, возможно ли держать всегда открытым поле со списком.
Хорошо... в JTextField добавьте прослушиватель для нажатия клавиш, а затем, как только какая-либо клавиша будет нажата, используйте набор для сортировки всех связанных элементов. Опция имеет строку String to toChar для получения каждого символа и последующей публикации записей в JList.
Во-вторых, вам лучше хранить свои записи в XML, тогда отслеживание будет проще, а любой алгоритм сортировки может быть легко применен.