Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Несколько редакторов и одна модель 
:(
    Опции темы
Vitaly333
Дата 8.7.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: 2
Всего: 2



Этот вопрос скорее всего относится не к UI, а к архитектуре приложения. Вообщем есть некая модель, имеющая древовидный характер. Эта модель является ядром программы и описывает только логику работы программы, без графики и UI. Для работы с моделью через UI используется класс , наследованный от JTree. Ему передается модель и в дальнейшем она может быть отредактирована через этот компонент UI. Но это лишь один из способов редактирования и отображения модели. Вообще у неё есть множество редакторов, которые интерпретируют её по своему и вносят в неё изменения, причем о существовании друг друга они ничего не знают, а знают только о модели. Нужно сделать так чтобы, изменения вносимые каким то одним редактором сразу же отражались в интрепретации модели в других редакторах. К примеру, после удаления некоего элемента из модели в одном из редакторов, то из JTree сразу же удалялся бы узел  и в остальных редакторах соостветсвующие интерпритации удаленного элемента модели. Можно конечно повторно проводить в каждом редакторе инициализацию... т.е. заново строить JTree, и.т.д. Но это совсем не хорошо , особенно при большом кол-ве элементов модели. Нужно более красивое решение в этом случае. Я тут подумал может быть подойдет механизм делегирования, используемый в Java UI? Т.е. создать интерфейс-слушатель с методами добавления, удаления, изменения, которые должны будут реализвать редакторы, зарегистрирующие у себя слушателя. И создать события у модели которые будут генерироватся при удалении, добавлении, изменении элементов модели. Только как генерировать эти события и будет ли это правильным?
PM MAIL   Вверх
COVD
Дата 8.7.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



У вас одна модель, имеющая несколько представлений (view). Любое изменение модели (неважно, кто его инициатор) должно быть оформлено как событие в EventDispatchThread (EDT). Результатом успешного изменения должно быть опять событие ( "модель изменилась!") в EDT. Для генерации таких событий используют методы fire..() . Все view должны быть где-то зарегистрированы в качестве слушателей.  Главное - все через события в EDT. Принципиальной разницы с вариантом одна модель - одно view нет. Представления в ответ на событие об измененной модели будут перерисовываться последовательно, поскольку очередь EDT одна. Представление, которое является инициатором изменения, перерисовывается как и все прочие view по получению события "модель изменилась!". Если попытка редактирования окончилась неудачно, то такого события не будет и никто не перерисовывается. Если модель редактируется только пользователем (не предусмотрены изменения, инициированные сервером, например ) , то синхронизировать модель не требуется. 

Это сообщение отредактировал(а) COVD - 8.7.2009, 23:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.