Возможно ли иметь один документ прослушиватель для нескольких текстовых полей в 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 5

1 ответ:

  • переключитесь с анонимного класса на внутренний класс и прикрепите один и тот же прослушиватель к каждому полю. Источник содержится в событии
  • Сделайте его отдельным классом и продолжайте использовать отдельные прослушиватели для каждого поля. Избегает, по крайней мере, дублирования кода

Смотрите этот учебник для примера внутреннего класса