![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
America |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 11.12.2005 Где: USA Репутация: нет Всего: 1 |
У меня есть некоторые переменные A B и C... которые подвергаются изменению...
Мне нужно отловить это изменение и изменить переменные D E и F. Мне это нужно для того чтобы сделать проекцию движущегося обьекта, у него есть координаты... как тока они изменились... меня ем и проекцию. Как мне организовать своё событие? ![]() выстрел(экранный) ![]()
|
|||
|
||||
Dekker |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Есть такой вариант - использование JavaBeans событий.
шаг1. Для следует создать в качестве члена класса (т.е. поля) ссылку на объект класса PropertyChangeSupport из пакета java.beans (полное имя класса, с пакетом: java.beans.PropertyChangeSupport) и инициализировать его. Допустим, имя ссылки на объект класса PropertyChangeSupport будет messager. шаг2. Допустим, у нас есть переменные (ссылки в случае не примитивных типов) А, В и С некоего класса AnyClass (или примитивного типа). В таком случае для установки их значений НЕ СТОИТ использывать оператор присваивания =. Следует создать методы: void setA( AnyClass newA ) { AnyClass oldA = A; A = newA; messager.firePropertyChange( new PropertyChangeEvent( this, "A", oldA, newA ); } void setB( AnyClass newB ) { AnyClass oldB = B; B = newB; messager.firePropertyChange( new PropertyChangeEvent( this, "B", oldB, newB ); } void setC( AnyClass newC ) { AnyClass oldC = C; C = newC; messager.firePropertyChange( new PropertyChangeEvent( this, "C", oldC, newC ); } И использовать для установки значений ТОЛЬКО эти методы. шаг3. Далее следует создать 3 класса, которые будут иметь возможность изменять значения переменных D, E & F. Каким образом - это Вам решать в зависимости от размера и сложности системы. Если класс HostClass небольшой, рекомендую использовать внутренние классы. Не рекомендую использовать анонимные классы в данном случае, так как это может затруднить читаемость программы при большом количестве сотворенных модификаций :) Каждый из классов должен реализовать интерфейс PropertyChangeListener. Допустим, создадим классы AChangeHandler, BChangeHandler, CChangeHandler. Я рассмотрю AChangeHandler, внутренний класс HostClass. Остальные - аналогично.
шаг4. Регистрация слушателей. Собственно, регистрация слушателей происходит в блоке, который исполняется до первого возможного изменения переменной при помощи метода set-. Вполне подходящим является конструктор. Итак,
В результате получаем цепочку: setA->messeger->AChangeListener(instance)->propertyChange(PropertyChangeEvent)-> ВАША_ЛОГИКА_РЕАКЦИИ Т.е., мы получили то, что хотели, а именно - адекватной реакции на изменение значения переменной :) |
||||
|
|||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 1 Всего: 34 |
А я бы попробовал объединить координаты и проэкцию в один обьект, в котором бы любой из методов setA, setB, setC (и т.п.) вызывал метод пересчета D, E, F.
И никаких событий ![]() Это сообщение отредактировал(а) _Y_ - 22.1.2007, 16:20 -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Dekker |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 21.1.2007 Репутация: нет Всего: нет |
Весь смысл в том, что устанавливать значения переменых (ссылок) нужно путем использования методов. В таком случае у Вас будет возможность устроить требуемую реакцию на изменение данных
![]() |
|||
|
||||
SimpAlex |
|
|||
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 22.5.2008 Репутация: нет Всего: нет |
Dekker, Огромное Спасибо)
|
|||
|
||||
jeank |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 26.6.2008 Где: Калининград Репутация: 1 Всего: 1 |
Вообще есть такая вещь как шаблон Наблюдатель - Observer pattern. А в яве есть его реализация посредством реализации интерфейса Observer, Observble. С помощью этого лови любые изменения, какие хошь - переменные, объекты...
|
|||
|
||||
frodo5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 17.3.2009 Репутация: нет Всего: нет |
Зачем огород городить? ни бины, ни обсервер тут не нужны. Просто создаешь класс с приватными полями под "отслеживаемые" переменные с сеттерами/геттерами. В сеттерах описываешь логику.
|
|||
|
||||
Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: нет Всего: 10 |
-------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |