Возможно ли иметь один документ прослушиватель для нескольких текстовых полей в Swing
У меня есть 12 фильтров для 12 столбцов в JTable. Каждый фильтр представляет собой текстовое поле типа JTextField. Каждый раз, когда пользователь вводит данные в фильтр текстового поля, происходит поиск.
Пример: Предположим, у меня есть 3 колонки и 3 текстовых поля над ними в качестве фильтров. Теперь любая вещь, которая набирается в любом из текстовых полей моей таблицы фильтрации должна произойти. Это происходит великолепно.
╔═════════════╦═════════════╦═════════════╗
║ [TextField] ║ [TextField] ║ [TextField] ║
╠═════════════╬═════════════╬═════════════╣
║ ║ ║ ║
╠═════════════╬═════════════╬═════════════╣
... ... ...
╠═════════════╬═════════════╬═════════════╣
║ ║ ║ ║
╚═════════════╩═════════════╩═════════════╝
Прослушиватель текстового поля для каждого текстового поля выглядит следующим образом,
textField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) { method(); }
public void removeUpdate(DocumentEvent e) { method(); }
public void insertUpdate(DocumentEvent e) { method(); }
};
Мой вопрос в том, что я повторяю этот код для всех 12 текстовых полей, что мне не очень понравилось. Это единственный путь, который у нас есть ? или кто-нибудь может предложить мне лучший способ ?
1 ответ:
- переключитесь с анонимного класса на внутренний класс и прикрепите один и тот же прослушиватель к каждому полю. Источник содержится в событии
- Сделайте его отдельным классом и продолжайте использовать отдельные прослушиватели для каждого поля. Избегает, по крайней мере, дублирования кода
Смотрите этот учебник для примера внутреннего класса