Страница 1 из 1

Как использовать в Java-программах собственные события?

Добавлено: 16 ноя 2004, 16:10
buratino
Прошу помощи у добрых людей!
В моей программе взаимодействуют два класса: GUI и внутренней логики InternalLogic.
Класс логики ничего не знает о GUI.
Его экземпляр является одним из полей GUI.
В этом же классе внутренней логики живет переменная private int score.
В процесе работы программы значение score может изменятся.

Задача состоит в том чтобы отобразить эти изменения, если таковы произойдут, на форме GUI.

Как это cделать?????

Если надо могу выслать код...
Можно ли генерировать из InternalLogic свое событие (например ScoreEvent), а в GUI добавить свой ScoreListener, которий бы на это все дело реагировал?
Как создавать классы собственных событий?
Как cделать так, чтобы ScoreListener знал, что ScoreEvent предназначен именно для него??!

Спасибо всем зарание...

Добавлено: 17 ноя 2004, 17:20
zeed
1. В GUI создаёш поле:
private ScoreListener sl;
2. В InternalLogic в ArrayList запихиваеш эту sl следующим методом:
public void setScoreListener(ScoreListener sl);
3. Далее, после изменения твоего score вызываеш sl.ScoreEvent

...ну и сам понимаеш, метод ScoreEvent для твоего конкретного ScoreListener обьекта вызовется в GUI.

не знаю на сколько понятно обьяснил... 8) но по-моему всё ясно

Добавлено: 18 ноя 2004, 10:23
Георгий
buration, разве ваш вопрос не решен? (paradise)

Добавлено: 18 ноя 2004, 13:22
Serafina
Шаблон Observer - ваш случай ;)

http://ooad.asf.ru/patterns/patterninfo.asp?ID=28

Добавлено: 18 ноя 2004, 15:22
Георгий
Я думаю, он уже понял:
http://www.relib.com/forums/topic.asp?id=844627

Добавлено: 19 ноя 2004, 15:00
buratino
С Observer/Observable действительно все получилось.
А что касается eventов/Listenerов хотелось бы разобратся до конца...

zeed,
в классе InternalLogic должно быть поле
private ArrayList al;
а в GUI - метод
public void setScoreListener(ScoreListener sl),
который делает что-то похожее на
il.setSl(sl);
где il - поле GUI типа InternalLogic,
а setSl() "запихивает эту sl" в il:
public void InternalLogic.setSl(ScoreListener sl) { al.add(sl); }

Да?
Другими словами, передать слушателя тому, что должно генерировать событие?
А потом в 3. sl.ScoreEvent (?) Это что - генерация события ?
слушатель генерирует событие??? себе же или как?
sl сидит в GUI - как на него ссылаться из InternalLogic?
наверно надо достать слушателя из al - мы же для этого его туда передаем...?

Я верно понимаю.? или как ...

Поправте меня пожалуйста!..