Запуск событий в Java при изменении состояния объекта - PullRequest
4 голосов
/ 09 ноября 2010

У меня есть объект в Java, состояние которого меняется с течением времени. Когда одно из полей в объекте достигает определенного значения, я хочу, чтобы сработало внешнее событие.

Я знаю, что Swing обрабатывает этот шаблон с помощью Listeners - и я использую Swing для этого проекта - но я не уверен, какой тип Listener будет применяться в этом случае. Пользователь не изменяет состояние объекта, и слушатели, похоже, запускаются только действиями пользователя.

Редактировать : объект, который я отслеживаю, сам по себе не является компонентом Swing - он работает в фоновом режиме в главном потоке.

Ответы [ 3 ]

5 голосов
/ 09 ноября 2010

Возможно, вы захотите взглянуть на java.util.Observable , который предназначен именно для этой цели.

Вот учебник JavaWorld по Observer и Observable:

2 голосов
/ 09 ноября 2010

Изменено ли это состояние пользователем или нет, на самом деле не имеет значения.Вы можете вызвать обратные вызовы слушателя из метода, который изменяет состояние, и убедиться, что состояние объекта может быть изменено только через этот метод:

class A {
    public void changeState(State newState) {
         state = newState;
         for (SomeEventListenerInterface el : listeners) {
              el.nofity(this, newState);
         }
    }
}
1 голос
/ 09 ноября 2010

и слушатели, похоже, запускаются только действиями пользователей.

Не всегда.Например, при изменении свойства многих компонентов Swing (фона, шрифта и т. Д.) Запускается PropertyChangeEvent.

Я бы посоветовал вам также использовать это событие.Прочитайте раздел из учебника Swing по Как написать слушатель изменения свойства для примера.

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