Два представления одних и тех же данных в разгаре, одно в JTable, другое в редактируемом тексте - PullRequest
1 голос
/ 10 февраля 2012

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

Пример, простой подход - связать JTable с экземпляром AbstractTableModel и передать ссылку на экземпляр AbstractTableModel также в другое представление. Но если другое представление решает изменить базовый экземпляр модели абстрактной таблицы, и в присутствии некоторых других слушателей, таких как слушатель табличной модели и некоторые слушатели в JTable, это усложняется очень быстро, по крайней мере для меня.

Не совсем уверен, но некоторая комбинация этих объектов может привести к непреднамеренному возникновению событий.

Мне неизвестны какие-либо паттерны в Swing, которые могут помочь с этой проблемой, но, видимо, MVC не рекомендуется в Swing.

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

Ваши мысли? (Swing и дизайн приложения новичок здесь.)

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

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

Так что просто дайте вашему кеш-листу сообщать об изменениях ваших данных (обновлять, создавать, удалять ...) с помощью собственной реализации propertychangelistener или просто с помощью eventbus .Все заинтересованные пользователи могут зарегистрироваться в вашем кеше для внесения изменений в данные и автоматически получать информацию.Поэтому ни одному из представлений не нужно знать друг друга, что делает ваш код довольно простым и легким в обслуживании и расширяемым для других представлений.

0 голосов
/ 10 февраля 2012

Вы можете полностью отклониться от схемы прослушивания и переключиться на схему на основе EventBus, я не думаю, что это сложно воспроизвести в среде Swing.Это концепция из концепции GWT.Ваше приложение должно инициализировать шину событий, и ее ссылка должна быть передана тем «объектам», которые должны транслировать события.Это должен быть класс «singleton», который передает один и тот же экземпляр EventBus.

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

Создайте свои обратные вызовы, исходя из идеи, и вы должны иметьочень простое и чистое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...