Обнаружить все изменения (сделанные пользователем) в тексте в элементах управления на форме - PullRequest
5 голосов
/ 27 мая 2011

У меня есть программа с методом Save (), которая сохраняет все данные в бланки и текстовые поля в форме.Есть ли способ вызывать «Save ()» каждый раз, когда пользователь вносит изменения в текстовое поле или спиннер?Нечто похожее на общий обработчик событий.

Спасибо

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Вы можете подключить один экземпляр ChangeListener ко всем вашим элементам управления, который может выглядеть (при наличии внутреннего класса):

private class ListenerImpl implements ChangeListener {
   public void stateChanged(ChangeEvent e) { save(); }
}

, чтобы добавить этот слушатель за один развы можете зациклить дочерние элементы вашего Container следующим образом:

final ListenerImpl l = new ListenerImpl();
for (Component c : getComponents()) {
   if (c instanceof JSpinner) {
      ((JSpinner)c).addChangeListener(l);
   } else if (c instanceof JTextPane ) { } // ... other types of components
}

вы должны искать различные типы компонентов, потому что нет интерфейса, который определяет метод addChangeListener(..) (который я знаюв).

2 голосов
/ 27 мая 2011

Я бы предложил добавить ChangeListener или FocusListener к каждому элементу управления в форме и вызвать Save() в одном из методов обратного вызова.(На самом деле, я бы, наверное, пошел на FocusListener и позвонил бы Save() с focusLost -метода.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...