2010-11-08 4 views
1

У меня есть MVCish deisgn с использованием SWT. У меня есть класс, который реализует весь GUI (кнопки и прослушиватели действий), и у него есть объект Shop, в котором есть список элементов. Время от времени, используя RMI (школьное задание), список обновляется (если в журнале есть что-то новое, он сообщает, что сервер и сервер распространяют новый список во все магазины), и все это круто. Проблема в том, что я понятия не имею, как заставить графический интерфейс перерисовать новый список, не нажав кнопку. То, что я хочу сделать:

1) есть новый материал в журнале
2) он посылает новый список на сервер
3) сервер отправляет список для всех магазинов
4) каждый магазин обновляет свой список
5) каждый магазин каким-то образом сообщает графическому интерфейсу, чтобы перерисовать JTree, представляющий список.

Я уже делал баллы 1-4. Возможно ли реализовать 5)? Я намеренно пытался отделить модель и контроллер (так как мы должны сделать терминал и интерфейс GUI), но теперь я вижу, что магазин получает новый список и что он даже не знает о существовании GUI (просто как обычный MVC).
Теперь у меня есть кнопка «Обновить», которая берет список из объекта «Магазин» и обновляет модель JTree, но из того, что мой учитель сказал мне, что он хочет, чтобы он был автоматическим. Я мог бы это сделать, написав как магазин, так и gui в одном классе, но это отстойно.Может ли модель обновить представление?

+0

@ Программное обеспечение: [«Теги домашней работы, как и другие так называемые мета-теги, теперь обескуражены», (http://meta.stackexchange.com/q/10812), но, Zenzen, пожалуйста, следуйте инструкциям [ общие рекомендации] (http://tinyurl.com/so-hints), включая указание конкретных ограничений, то, что вы пробовали до сих пор, и что конкретно вас путает. – 2010-11-08 19:32:34

+0

Ну домашняя метка была отредактирована кем-то еще, и я думал, что я был достаточно ясен с моим вопросом. –

+0

@Roger: Я не знал об этом - спасибо за указание на это. –

ответ

2

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

С точки зрения пользовательского интерфейса, я бы не хотел, чтобы просмотр автоматически обновлялся - если бы я сверлялся на что-то, и вдруг дерево было сброшено, я был бы раздражен. Я думаю, что гораздо удобнее отображать такое сообщение, как «Доступные обновления каталога, нажмите« Обновить », чтобы увидеть новые элементы» (вроде как сообщение «Новые ответы» SO) или, может быть, просто выделите кнопку обновления (изменив цвет фона или что-то еще).

+0

О, я не думал по шаблону Observer, попробует это благодаря.И да, лично я также предпочту кнопку «Обновить» и предупреждение, такое как «есть новый список» или «файл, который вы пытаетесь использовать, недоступен, попробуйте обновить», но мне больно и надоело спорить с мои учителя, которые всегда знают лучше. Благодарю. –

1

То, что вы ищете, называется привязкой данных. Связывание данных - это идея объединить модель и представление вместе, чтобы обновляемая модель автоматически обновляла представление.

К сожалению, с помощью быстрого поиска не похоже, что доступно решение для привязки данных для JTree. Я мог ошибаться, но поиск приводит меня к мысли, что вам придется написать его самостоятельно.

Простым способом (хотя, возможно, и не лучшим решением) было бы иметь ссылку на JTree на модели. Затем вы можете сообщить JTree об обновлении в любое время, когда модель будет изменена таким образом, чтобы изменить вид.

+0

Ах да, я знаю, что могу дать модели ссылку на JTree, но мне действительно не нравятся дополнительные зависимости в моем MVC. Спасибо, что «привязка данных» полностью забыла об этом. Я буду искать Google, спасибо. –

Смежные вопросы