Получение Swing для чтения ввода без кнопки отправки - PullRequest
4 голосов
/ 24 февраля 2012

Это для задания, поэтому ответы не должны содержать код, написанный для меня.

Я написал программу, которая по сути является программой автозаполнения. Он берет слово и возвращает лучшие совпадения.

Я пытаюсь написать внешний интерфейс для него в разгаре (с которым у меня нет опыта) и хочу, чтобы мой внешний интерфейс делал следующее: Я хочу, чтобы поле ввода постоянно читало для ввода пользователя, передавая это значение в другая программа, и немедленно возвращает совпадения в выпадающем списке, как, скажем, в Google. Кажется, я не могу найти какую-либо информацию о том, как это сделать, все вводные уроки используют кнопку отправки.

Может кто-нибудь объяснить мне, как это будет сделано, или указать мне ресурс, который мог бы объяснить это? Опять же, пожалуйста, не пишите код для меня, я не хочу невольно обманывать мое задание.

Ответы [ 4 ]

6 голосов
/ 24 февраля 2012

Если вы используете JTextField, вы можете зарегистрировать прослушиватель документов на нем.

3 голосов
/ 24 февраля 2012

Если ваше поле ввода - JTextField, вы можете добавить DocumentListener (это хороший учебник) для захвата ввода символов.

2 голосов
/ 24 февраля 2012

Я думаю, что никто из ответчиков ..., я только о Don't reinvent the wheel

1) использовать JTable с одним (или двумя, если речь идет о словаре) столбцом и с базовой имплементацией для Сортировка и фильтрация (пример с фильтрацией из JTextField приведен в учебнике), JTable может быть самым сложным из JComponents и есть все (довольно легко) возможное

2) использовать Автозаполнение JComboBox / JTextField

3) использовать SwingX Decorator с JXList или JXTable

4) если вам нужно перенаправить вывод в отдельное окно, тогда используйте JDialog / JWindow для всплывающего окна

0 голосов
/ 24 февраля 2012

Один из подходов может быть следующим:

  1. Прикрепить обработчик для обнаружения нажатия клавиши в текстовом поле.
  2. Захватить текст из поля и создать событие «поиск»который может быть запущен и передать его какой-либо форме службы, которая отправит его в определенный момент в будущем (подсказка: ExecutorService, Future)
  3. Сохраните этот дескриптор, и если событие нажатия клавиши произойдет снова, отмените предыдущий и отправьте новый.
  4. Когда событие выполняется в будущем и возвращает результат, откройте панель, отображающую список элементов.
...