2012-04-03 5 views
0

Что является гладким (легко и удобно по дизайну) Способ обновления всех данных после некоторых изменений? У меня есть приложение, где может быть открыт несколько окон, отображающих те же данные. Пользователь может редактировать один узел в одном из окон, но Мне нужно обновить этот узел (или его дочерние элементы) во всех представлениях.Как обновить все ExplorerView, показывающие одни и те же данные?

Пример: У меня есть ExplorerView используя OutlineView в моем TopComponent и он показывает все главы в древовидной структуре. Но я могу открыть это окно много раз (например, «новое окно» в MS Word, что является еще одним «представлением» по тем же данным). Когда я меняю заголовок одной главы, мне нужно обновить ее везде, где она видна (во всех расширенных узлах).

Я вижу одно решение, но у него есть некоторые плюсы и минусы: сделать свой собственный поиск и хранить в нем все открытые корневые узлы всех открытых ExplorerViews. Затем на каждом редактировании просто пройдите через все открытые корневые узлы и вызовите на них некоторый метод, чтобы воссоздать просматриваемую структуру (вызов setChildren ... как при первом показе). Но древовидное представление рушится. И если бы я создал какой-то механизм, некоторые мои реализации OutlineView, которые будут помнить все расширенные узлы, поэтому он воссоздает расширенное дерево (но не все дерево, только так, как было), это может занять некоторое время, когда имея слишком много данных, не так ли?

+0

Я пробовал немного другое решение, но я не решил большой проблемы. Я сделал свой поиск и сохранил там все узлы (хорошо реализовав интерфейсы, которые были подклассами этих узлов, - вдохновленные статьей возможностей перезагрузки Geertjan). Затем я мог обновить только тот узел, который изменился (прокручивать их и проверять данные, он показывает) или его родительский элемент. Проблема заключалась в том, что я не знаю, как удалить эти объекты из поиска при воссоздании дочерних узлов какого-либо узла (setChildren). Таким образом, поиск только вырос, потому что я не знал, что узлы удаляют их из него после каждого изменения. –

ответ

1

Каждый вид построен с набором узлов. Если вы изменяете данные в одном узле, то модификация отражается в представлении, содержащем узел, но не в других представлениях (а не в других узлах) :-(.

Когда я архивирую приложение на основе RCP на базе NB, я строю model with "entities". Эти лица имеют «способность», что я модель с Lookup NetBeans. Они, как правило, простой POJOs.

Тогда, когда я хочу, чтобы «видеть» объект я создаю «Node» для него. You can have as many nodes you want (как многих «MS Word» выглядит так, как вы хотите), но вы хотите сохранить одно «дерево» с вашей моделью.

Если я изменяю свойство в «сущности», это изменение распространяется на все слушающие его узлы. Вы можете хотеть t o см. how to relate 'abilities' with 'actions'.

+0

Thx, на самом деле, мое приложение частично построено на вашем примере (ну, я тоже там посмотрел, но я построил его из статей Geertjan по возможностям CRUD с Derby на DZone, потому что сначала я хотел использовать базу данных, только позже я пошел только на сериализацию). Но у меня есть 2 вопроса, которые я не вижу в ответах в ваших статьях, возможно, вы тоже их разрешили: –

+0

1) Возможно, я делаю это. неправильно, но я думаю, что ваш (и мой) способ поиска, который разделяют узлы, растет и растет, потому что после каждого вызова setChildren через ReloadAction старые узлы не удаляются, просто новые (часто одного и того же значения). –

+0

2) Как вы поделитесь поиском между большим количеством окон? В моем случае я не могу открыть другие «представления» на одном дереве из какого-то первого окна, потому что у меня есть ie. Главы и символы (которые появляются в этих главах).Я открываю новые взгляды, чтобы посмотреть на Персонажи в конкретной главе. Но, конечно, некоторые символы появляются во многих главах, поэтому мне нужно обновить Character Adam во всех представлениях, где это видно, после его редактирования. И, к сожалению, этот пример не единственный, я могу открыть окно «Персонажи» из многих источников. Вот почему я подумал о каком-то центральном поиске. –

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