2012-04-03 2 views
0

Quel est le plus lisse (facile et bon dans la conception) façon d'actualiser toutes les données après certains ont changé? J'ai une application, où peut être ouvert plusieurs fenêtres montrant les mêmes données. L'utilisateur peut modifier un nœud dans l'une des fenêtres, mais Je dois actualiser ce nœud (ou ses enfants) dans chaque vue.Comment rafraîchir tous les ExplorerViews affichant les mêmes données?

Exemple: je ExplorerView utilisant le OutlineView dans mon TopComponent et il montre tous les chapitres dans l'arborescence. Mais je peux ouvrir cette fenêtre plusieurs fois (comme "nouvelle fenêtre" dans MS Word, qui est une autre "vue" sur les mêmes données). Quand je change le titre d'un chapitre, j'ai besoin de le rafraîchir partout, où il est visible (dans tous les nœuds étendus).

Je vois une solution, mais il a quelques avantages et les inconvénients: faire ma propre recherche et stocker en elle tous les nœuds racine ouverts de tous ExplorerViews ouverts. Ensuite, à chaque modification, parcourez simplement tous les nœuds racines ouverts et appelez une méthode pour les recréer (appelez setChildren ... comme lors de la première présentation). Mais la vue de l'arbre s'effondre. Et si je devais créer un mécanisme, une partie de mon implémentation de OutlineView, qui se souviendrait de tous les nœuds étendus, afin de recréer l'arborescence étendue (mais pas tout l'arbre, comme il était), cela pourrait prendre un certain temps, avoir trop de données, non?

+0

J'ai essayé une solution un peu différente, mais je n'ai pas résolu le gros problème. J'ai fait ma recherche et y ai stocké tous les nœuds (bien implémentation des interfaces, qui étaient des sous-classes de ces nœuds - inspirés de l'article de Geertjan sur les capacités Reloadable). Ensuite, je ne pouvais mettre à jour que le nœud, qui a changé (cycle à travers eux et vérifier les données, il montre), ou son parent. Le problème était que je ne savais pas comment supprimer ces objets de la recherche lors de la recréation des enfants d'un nœud (setChildren). Donc, la recherche n'a fait que croître, car je ne connaissais pas les nœuds pour les retirer après chaque changement. –

Répondre

1

Chaque vue est construite avec un ensemble de nœuds. Si vous modifiez les données dans un nœud, la modification est reflétée dans la vue contenant le nœud, mais pas dans les autres vues (pas les autres nœuds) :-(

Lorsque j'architecte une application basée sur NB RCP, je construis un model with "entities". Ces entités ont des « capacités » que je modèle avec la Lookup NetBeans. ce sont POJO généralement simples.

Puis, quand je veux « voir » une entité créer un « nœud » pour elle. You can have as many nodes you want (comme beaucoup "MS Word" comme vous voulez), mais vous voulez garder un seul "arbre" avec votre modèle

Si je change une propriété dans une "entité", cette modification est propagée à tous les nœuds qui l'écoutent. Vous voudrez peut-être t o voir how to relate 'abilities' with 'actions'.

+0

Thx, en fait, mon application est en partie construite par votre exemple (eh bien, j'ai regardé là aussi, mais je l'ai construit à partir des articles de Geertjan sur les capacités CRUD, avec Derby, sur DZone, parce que je voulais d'abord utiliser base de données plus tard je suis allé seulement à la sérialisation). Mais j'ai 2 questions, dont je ne vois pas les réponses dans vos articles, peut-être vous les avez résolus aussi: –

+0

1) Peut-être que je fais sth. mal, mais je pense, de votre (et ma) manière, la recherche, qui est partagée par les nœuds, grandit et grandit, car après chaque appel de setChildren via le ReloadAction, les anciens nœuds ne sont pas supprimés, juste nouveaux (souvent de même valeur) les nœuds sont ajoutés. –

+0

2) Comment partageriez-vous la recherche entre plusieurs fenêtres? Dans mon cas, je ne peux pas ouvrir les autres "vues" sur le même arbre à partir d'une première fenêtre, parce que je l'ai. Chapitres et caractères (qui apparaissent dans ces chapitres) données.J'ouvre de nouvelles vues pour regarder les caractères dans le chapitre particulier. Mais bien sûr, certains caractères apparaissent dans de nombreux chapitres, j'ai donc besoin de mettre à jour le personnage Adam dans chaque vue, où il est visible, après sa modification. Et malheureusement, cet exemple n'est pas le seul, je peux ouvrir la fenêtre des caractères à partir de nombreuses sources. C'est pourquoi j'ai pensé à une recherche centrale. –

Questions connexes