Как сделать текстовое поле для поиска (с советами, как поиск в 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, тогда отслеживание будет проще, а любой алгоритм сортировки может быть легко применен.

Другие вопросы по тегам