Приложение Java Swing с JTree - MVC Design: где расположить объект TreeModel архитектурно? - PullRequest
2 голосов
/ 25 ноября 2011

Прошу прощения за многословность этого вопроса, так как, когда я его пишу, я пытаюсь продумать мою проблему с дизайном!

Я унаследовал приложение Swing, которое требует реорганизации в приложение RMI. Заказчику требуется, чтобы графический интерфейс Swing работал локально и обменивался данными через RMI с удаленным серверным процессом, который включает класс Controller, который направляет вызовы в разделы бизнес-логики и сохранность базы данных на стороне сервера, когда стимулируется EventListeners, которые перекрывают разрыв между клиентом Swing и контроллер.

Я должен реализовать дизайн MVC, позволяющий разрабатывать новые представления для использования с сервером.

В настоящее время графический интерфейс клиента Swing содержит JTree, который заполняется с помощью DefaultTreeModel. Эта модель построена с использованием объектов DefaultMutableTreeNode, которые заполняются состоянием бизнес-объекта через преобразователь BusinessObject, который находится между этими объектами и моим источником данных.

У меня нет проблем с пониманием того, как клиент и TreeModel связаны между собой: я установил TreeModelListener для поиска изменений в TreeModel. Если объект TreeModel изменяется, я перерисовываю JTree, вызывая его метод treeHasChanged ().

Однако у меня болит голова, когда я пытаюсь изобразить, какой процесс будет стимулировать TreeModel, чтобы его содержимое заполнилось последними данными в базе данных, что в свою очередь вызвало бы мой TreeModelListener для обновления Jtree моего графического интерфейса. Кто должен «владеть» TreeModel? Должен ли это быть класс в модели, который составляет часть состояния контроллера? Должны ли Действия в Контроллере EventListeners GUI сделать жесткий вызов для запуска подпрограммы для обновления TreeModel?

Или же TreeModel является расширением виджета GUI, и в этом случае это компонент View? Если это так, что будет правильным способом вызвать обновление состояния этого объекта?

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

Ваш, очень растерян!

Ответы [ 3 ]

2 голосов
/ 25 ноября 2011

В дополнение к информативным ссылкам @ mKorbel и комментариям @ Shakedown, рассмотрите возможность использования SwingWorker для периодического сближения со средним уровнем и обновления вашего TreeModel, возможно, в ответ на Timer.Здесь есть похожий пример здесь ;обратите внимание, что графический интерфейс остается отзывчивым во время выполнения запроса.Конечно, ваше приложение должно решать, как часто нужно запускать обновление и как часто вы обновляете графический интерфейс.

2 голосов
/ 25 ноября 2011

Я не уверен, что вы описали AbstractTreeModel или DefaultTreeModel , я думаю, что эта статья Понимание TreeModel все еще лучше, и ссылка на учебник JTree

для действительно помощи вам нужно отредактировать ваш вопрос и опубликовать изображение вашей headache в форме SSCCE , здесь - это тонны хороших основ длясоздание SSCCE

0 голосов
/ 05 декабря 2011

Я обдумал проблему.

Я решил, что плохая идея, чтобы Swing API присутствовал в модели моего приложения, поскольку мое приложение может принимать различные типы пользовательского интерфейса (Headless, Swing, Web).

Таким образом, я решил, что правильный подход заключается в том, чтобы объект TreeModel находился в представлении и заполнялся помощником вида, который предоставляет доступ к общей презентации уровня модели для любого заинтересованного пользовательского интерфейса.

...