![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Vitaly333 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 6.11.2006 Где: Volgograd Репутация: 2 Всего: 2 |
Этот вопрос скорее всего относится не к UI, а к архитектуре приложения. Вообщем есть некая модель, имеющая древовидный характер. Эта модель является ядром программы и описывает только логику работы программы, без графики и UI. Для работы с моделью через UI используется класс , наследованный от JTree. Ему передается модель и в дальнейшем она может быть отредактирована через этот компонент UI. Но это лишь один из способов редактирования и отображения модели. Вообще у неё есть множество редакторов, которые интерпретируют её по своему и вносят в неё изменения, причем о существовании друг друга они ничего не знают, а знают только о модели. Нужно сделать так чтобы, изменения вносимые каким то одним редактором сразу же отражались в интрепретации модели в других редакторах. К примеру, после удаления некоего элемента из модели в одном из редакторов, то из JTree сразу же удалялся бы узел и в остальных редакторах соостветсвующие интерпритации удаленного элемента модели. Можно конечно повторно проводить в каждом редакторе инициализацию... т.е. заново строить JTree, и.т.д. Но это совсем не хорошо , особенно при большом кол-ве элементов модели. Нужно более красивое решение в этом случае. Я тут подумал может быть подойдет механизм делегирования, используемый в Java UI? Т.е. создать интерфейс-слушатель с методами добавления, удаления, изменения, которые должны будут реализвать редакторы, зарегистрирующие у себя слушателя. И создать события у модели которые будут генерироватся при удалении, добавлении, изменении элементов модели. Только как генерировать эти события и будет ли это правильным?
|
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
У вас одна модель, имеющая несколько представлений (view). Любое изменение модели (неважно, кто его инициатор) должно быть оформлено как событие в EventDispatchThread (EDT). Результатом успешного изменения должно быть опять событие ( "модель изменилась!") в EDT. Для генерации таких событий используют методы fire..() . Все view должны быть где-то зарегистрированы в качестве слушателей. Главное - все через события в EDT. Принципиальной разницы с вариантом одна модель - одно view нет. Представления в ответ на событие об измененной модели будут перерисовываться последовательно, поскольку очередь EDT одна. Представление, которое является инициатором изменения, перерисовывается как и все прочие view по получению события "модель изменилась!". Если попытка редактирования окончилась неудачно, то такого события не будет и никто не перерисовывается. Если модель редактируется только пользователем (не предусмотрены изменения, инициированные сервером, например ) , то синхронизировать модель не требуется.
Это сообщение отредактировал(а) COVD - 8.7.2009, 23:06 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |