TOUT -|- TOUT sur le visuel -|- TOUT sur la logistique
Date sent: Thu, 01 Mar 2001 10:25:41 +0100
From: Benoit ADAM <badlist@softeam.fr>
Organization: Softeam - Think Object !
To: java@u-strasbg.fr
Subject: Arbre et modele
Send reply to: java@u-strasbg.fr
Salut a tous,
Je veux utiliser un JTree et un modele associé qui représente mes objets
metiers qui sont hierarchiques. Suppposons, que je modifie autrment que
par l'arbre, mon modele metier. Mon modele métier va alors envoyer un
evenement que l'arbre va recuperer. Comment savoir quelle partie de
l'arbre je dois rafraichir ? Intuitivement, a partir de l'evenement, je
voulais recuperer l'objet metier modifié et puis récuperer le noeud
(DefaultMutableTreeNode) dans lequel il est, mais la je n'ai aucun moyen
de le faire (Le modele metier ne connait pas de classes graphiques) !
Il y a pas mal d'exemples qui montrent comment quand on modifie un arbre,
on repercute ca sur le modele, mais l'inverse ....
Merci de votre aide.
Ben
From: ROUSSEL Yohann <yohann.roussel@criltelecom.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: Arbre et modele
Date sent: Thu, 1 Mar 2001 10:44:16 +0100
Send reply to: java@u-strasbg.fr
et si tu modifiais ton arbre en passant par le TreeModel ou que tu posais
un listener sur tes nodes calque sur le TreeModelListener ?
> -----Message d'origine-----
> De: Benoit ADAM [SMTP:badlist@softeam.fr]
> Date: jeudi 1 mars 2001 10:26
> À: java@u-strasbg.fr
> Objet: Arbre et modele
>
> Salut a tous,
>
> Je veux utiliser un JTree et un modele associé qui représente mes objets
> metiers qui sont hierarchiques. Suppposons, que je modifie autrment que
> par l'arbre, mon modele metier. Mon modele métier va alors envoyer un
> evenement que l'arbre va recuperer. Comment savoir quelle partie de
> l'arbre je dois rafraichir ? Intuitivement, a partir de l'evenement, je
> voulais recuperer l'objet metier modifié et puis récuperer le noeud
> (DefaultMutableTreeNode) dans lequel il est, mais la je n'ai aucun moyen
> de le faire (Le modele metier ne connait pas de classes graphiques) !
>
> Il y a pas mal d'exemples qui montrent comment quand on modifie un
> arbre, on repercute ca sur le modele, mais l'inverse ....
>
> Merci de votre aide.
>
> Ben
Date sent: Thu, 01 Mar 2001 12:49:04 +0100
From: Joel Landure <jlandure@shom.fr>
To: java@u-strasbg.fr
Subject: Re: Arbre et modele
Send reply to: java@u-strasbg.fr
En fait, il te faut surcharger les classes JTree, DefaultTreeModel et
DefaultTreeSelectionModel. Tu crées une classe MonMòdeleMetier (dans les
exemples EntitesModel) qui soit capable de générer des évènement (regarde
le beans PropertyChangeSupport (import java.beans.*;)) et tu places ta
classe dérivée de DefaultTreeSelectionModel à l'écoute des évènements
survenus dans ton ModeleMetier (ex l'evènement COURANT_PROPERTY). Quand
cet évènement survient, tu le gère dans les classes de ton interface.
Exemple de code :
protected void fireValueChanged(TreeSelectionEvent e)
{
super.fireValueChanged(e);
TreePath selPath = e.getNewLeadSelectionPath();
if (selPath != null) {
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)
selPath.getLastPathComponent();
if ((selectedNode.getUserObject() instanceof DBEntite)) {
DBEntite dbe = (DBEntite) selectedNode.getUserObject() ;
EntitesModel.setCourant(dbe) ;
}
}
}
et c'est la classe dérivée du JTree qui prend le relais car elle écoute
aussi le modèle métier Exemple de code :
/**
Gestion des évènements du modèle général des entités ===> Ton
modèle métier
*/
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(EntitesModel.COURANT_PROPERTY)) {
DBEntite courant = modeleEntites.getCourant();
DefaultMutableTreeNode node = findNodeOfEntite(courant);
TreeNode[] nodes = treeModel.getPathToRoot(node);
TreePath path = new TreePath(nodes);
this.scrollPathToVisible(path);
treeSelectionModel.setSelectionPath(path);
newEntiteCourante = true;
}
}
et voilà.
JL
zeljko velaja wrote:
>
> A chaque objet métier tu pourrais associer une référence au noeud qui le
> représente. Tu n'aurais plus qu'à répercuter tes modifications sur le
> noeud et le recharger dans l'arborescence.
>
> -----Message d'origine-----
> De : Benoit ADAM [mailto:badlist@softeam.fr]
> Envoyé : jeudi 1 mars 2001 09:26
> À : java@u-strasbg.fr
> Objet : Arbre et modele
>
> Salut a tous,
>
> Je veux utiliser un JTree et un modele associé qui représente mes objets
> metiers qui sont hierarchiques. Suppposons, que je modifie autrment que
> par l'arbre, mon modele metier. Mon modele métier va alors envoyer un
> evenement que l'arbre va recuperer. Comment savoir quelle partie de
> l'arbre je dois rafraichir ? Intuitivement, a partir de l'evenement, je
> voulais recuperer l'objet metier modifié et puis récuperer le noeud
> (DefaultMutableTreeNode) dans lequel il est, mais la je n'ai aucun moyen
> de le faire (Le modele metier ne connait pas de classes graphiques) !
>
> Il y a pas mal d'exemples qui montrent comment quand on modifie un
> arbre, on repercute ca sur le modele, mais l'inverse ....
>
> Merci de votre aide.
>
> Ben
From: zeljko velaja <zvelaja@visualfriendly.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: Arbre et modele
Date sent: Thu, 1 Mar 2001 12:05:46 -0000
Send reply to: java@u-strasbg.fr
A chaque objet métier tu pourrais associer une référence au noeud qui le
représente. Tu n'aurais plus qu'à répercuter tes modifications sur le
noeud et le recharger dans l'arborescence.
-----Message d'origine-----
De : Benoit ADAM [mailto:badlist@softeam.fr]
Envoyé : jeudi 1 mars 2001 09:26
À : java@u-strasbg.fr
Objet : Arbre et modele
Salut a tous,
Je veux utiliser un JTree et un modele associé qui représente mes objets
metiers qui sont hierarchiques. Suppposons, que je modifie autrment que
par l'arbre, mon modele metier. Mon modele métier va alors envoyer un
evenement que l'arbre va recuperer. Comment savoir quelle partie de
l'arbre je dois rafraichir ? Intuitivement, a partir de l'evenement, je
voulais recuperer l'objet metier modifié et puis récuperer le noeud
(DefaultMutableTreeNode) dans lequel il est, mais la je n'ai aucun moyen
de le faire (Le modele metier ne connait pas de classes graphiques) !
Il y a pas mal d'exemples qui montrent comment quand on modifie un arbre,
on repercute ca sur le modele, mais l'inverse ....
Merci de votre aide.
Ben
From: "Herve AGNOUX" <hagnoux@mail.club-internet.fr>
To: java@u-strasbg.fr
Date sent: Thu, 1 Mar 2001 13:43:33 +0100
Subject: Re: Arbre et modele
Priority: normal
Send reply to: java@u-strasbg.fr
Le 1 Mar 01, Benoit ADAM a écrit :
>
> Il y a pas mal d'exemples qui montrent comment quand on modifie un
> arbre, on repercute ca sur le modele, mais l'inverse ....
>
Il faut définir et repérer les relations entre tes objets métiers et tes
TreeNodes.
Avec le JTree, c'est malheureusement plus facile à dire qu'à faire.
Pour ma part, j'y arrive avec les combines classiques : jeu de
constantes, mémorisation dans des variables des noeuds
principaux, classes persos héritées de DefaultMutableTreeNode.
Cette dernière piste est la plus passe-partout : tu te créées ta
classe noeud avec laquelle il t'es facile de parcourir l'arbre pour
retrouver où se situe ton objet métier.
Et il ne faut pas oublier ensuite de faire un
"monModèle.nodeStructure/ValueChanged", si tu veux que l'arbre
soit visiblement rafraichi.
Si quelqu'un connait une astuce moins tirée par les cheveux, je
suis preneur.
--
Hervé AGNOUX hagnoux@mail.club-internet.fr
Faites vos sites avec des formulaires électroniques :
http://www.diaam.com
Date sent: Thu, 01 Mar 2001 14:59:08 +0100
From: Benoit ADAM <badlist@softeam.fr>
Organization: Softeam - Think Object !
To: java@u-strasbg.fr
Subject: Re: Arbre et modele
Send reply to: java@u-strasbg.fr
Merci pour vos reponses :
Je reponds a deux de vos reponses :
>A chaque objet métier tu pourrais associer une référence au noeud qui le
>représente. Tu n'aurais plus qu'à répercuter tes modifications sur le
>noeud et le recharger dans l'arborescence.
Ca oblige a modifier le modele metier, normalement je devrai avoir une
independance entre la visualisation graphique de mon modele et mon modele
lui meme, non ?
Pour la deuxieme reponse (plus bas) c'est la ligne suivante qui me gene :
>findNodeOfEntite(courant) C'est quoi le code de cette chose la ? Parcours
de l'arbre a partir de la racine pour retrouver le noeud qui contient mon
objet metier modifié ?
Merci
Ben
Joel Landure a écrit :
> En fait, il te faut surcharger les classes JTree, DefaultTreeModel et
> DefaultTreeSelectionModel. Tu crées une classe MonMòdeleMetier (dans les
> exemples EntitesModel) qui soit capable de générer des évènement
> (regarde le beans PropertyChangeSupport (import java.beans.*;)) et tu
> places ta classe dérivée de DefaultTreeSelectionModel à l'écoute des
> évènements survenus dans ton ModeleMetier (ex l'evènement
> COURANT_PROPERTY). Quand cet évènement survient, tu le gère dans les
> classes de ton interface. Exemple de code :
> protected void fireValueChanged(TreeSelectionEvent e)
> {
> super.fireValueChanged(e);
>
> TreePath selPath = e.getNewLeadSelectionPath();
> if (selPath != null) {
>
> DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)
> selPath.getLastPathComponent();
>
> if ((selectedNode.getUserObject() instanceof DBEntite)) {
> DBEntite dbe = (DBEntite) selectedNode.getUserObject() ;
> EntitesModel.setCourant(dbe) ;
> }
> }
> }
> et c'est la classe dérivée du JTree qui prend le relais car elle écoute
> aussi le modèle métier Exemple de code :
> /**
> Gestion des évènements du modèle général des entités ===> Ton
> modèle métier
> */
> public void propertyChange(PropertyChangeEvent evt) {
>
> if (evt.getPropertyName().equals(EntitesModel.COURANT_PROPERTY))
> {
> DBEntite courant = modeleEntites.getCourant();
> DefaultMutableTreeNode node = findNodeOfEntite(courant);
> TreeNode[] nodes = treeModel.getPathToRoot(node); TreePath
> path = new TreePath(nodes); this.scrollPathToVisible(path);
> treeSelectionModel.setSelectionPath(path); newEntiteCourante
> = true;
> }
> }
>
> et voilà.
>
> JL
>
> zeljko velaja wrote:
> >
> > A chaque objet métier tu pourrais associer une référence au noeud qui
> > le représente. Tu n'aurais plus qu'à répercuter tes modifications sur
> > le noeud et le recharger dans l'arborescence.
> >
> > -----Message d'origine-----
> > De : Benoit ADAM [mailto:badlist@softeam.fr]
> > Envoyé : jeudi 1 mars 2001 09:26
> > À : java@u-strasbg.fr
> > Objet : Arbre et modele
> >
> > Salut a tous,
> >
> > Je veux utiliser un JTree et un modele associé qui représente mes
> > objets metiers qui sont hierarchiques. Suppposons, que je modifie
> > autrment que par l'arbre, mon modele metier. Mon modele métier va
> > alors envoyer un evenement que l'arbre va recuperer. Comment savoir
> > quelle partie de l'arbre je dois rafraichir ? Intuitivement, a partir
> > de l'evenement, je voulais recuperer l'objet metier modifié et puis
> > récuperer le noeud (DefaultMutableTreeNode) dans lequel il est, mais
> > la je n'ai aucun moyen de le faire (Le modele metier ne connait pas de
> > classes graphiques) !
> >
> > Il y a pas mal d'exemples qui montrent comment quand on modifie un
> > arbre, on repercute ca sur le modele, mais l'inverse ....
> >
> > Merci de votre aide.
> >
> > Ben
Date sent: Thu, 01 Mar 2001 15:29:44 +0100
From: Joel Landure <jlandure@shom.fr>
To: java@u-strasbg.fr
Subject: Re: Arbre et modele
Send reply to: java@u-strasbg.fr
> Pour la deuxieme reponse (plus bas) c'est la ligne suivante qui me gene
> :
> >findNodeOfEntite(courant)
> C'est quoi le code de cette chose la ? Parcours de l'arbre a partir de
> la racine pour retrouver le noeud qui contient mon objet metier modifié
> ?
Il s'agit d'une méthode renvoie une enumération permettant de parcourir un
arbre horizontalement => l'ensemble des noeuds avant les feuilles : 1
--- 2 ---- 5
| \
3 \
| \ 6
4
/**
Cette méthode recherche une entité dans le modèle de l'arbre
@param l'entité à rechercher
@return le noeud contenant l'entité ou null.
*/
protected DefaultMutableTreeNode findNodeOfEntite(DBEntite entite) {
DefaultMutableTreeNode root =
(DefaultMutableTreeNode)treeModel.getRoot();
Enumeration enum = root.breadthFirstEnumeration();
while (enum.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
enum.nextElement();
if ((node.getUserObject() instanceof DBEntite)) {
DBEntite dbe = (DBEntite) node.getUserObject() ;
if ( dbe.equals(entite) )
return node;
}
}
return null;
}
JL
Benoit ADAM wrote:
>
> Merci pour vos reponses :
>
> Je reponds a deux de vos reponses :
>
> >A chaque objet métier tu pourrais associer une référence au noeud qui
> >le représente. Tu n'aurais plus qu'à répercuter tes modifications sur
> >le noeud et le recharger dans l'arborescence.
> Ca oblige a modifier le modele metier, normalement je devrai avoir une
> independance entre la visualisation graphique de mon modele et mon
> modele lui meme, non ?
>
> Pour la deuxieme reponse (plus bas) c'est la ligne suivante qui me gene
> :
> >findNodeOfEntite(courant)
> C'est quoi le code de cette chose la ? Parcours de l'arbre a partir de
> la racine pour retrouver le noeud qui contient mon objet metier modifié
> ?
>
> Merci
>
> Ben
>
> Joel Landure a écrit :
>
> > En fait, il te faut surcharger les classes JTree, DefaultTreeModel et
> > DefaultTreeSelectionModel. Tu crées une classe MonMòdeleMetier (dans
> > les exemples EntitesModel) qui soit capable de générer des évènement
> > (regarde le beans PropertyChangeSupport (import java.beans.*;)) et tu
> > places ta classe dérivée de DefaultTreeSelectionModel à l'écoute des
> > évènements survenus dans ton ModeleMetier (ex l'evènement
> > COURANT_PROPERTY). Quand cet évènement survient, tu le gère dans les
> > classes de ton interface. Exemple de code :
> > protected void fireValueChanged(TreeSelectionEvent e)
> > {
> > super.fireValueChanged(e);
> >
> > TreePath selPath = e.getNewLeadSelectionPath();
> > if (selPath != null) {
> >
> > DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)
> > selPath.getLastPathComponent();
> >
> > if ((selectedNode.getUserObject() instanceof DBEntite)) {
> > DBEntite dbe = (DBEntite) selectedNode.getUserObject() ;
> > EntitesModel.setCourant(dbe) ;
> > }
> > }
> > }
> > et c'est la classe dérivée du JTree qui prend le relais car elle
> > écoute aussi le modèle métier Exemple de code :
> > /**
> > Gestion des évènements du modèle général des entités ===> Ton
> > modèle métier
> > */
> > public void propertyChange(PropertyChangeEvent evt) {
> >
> > if
> > (evt.getPropertyName().equals(EntitesModel.COURANT_PROPERTY))
> > {
> > DBEntite courant = modeleEntites.getCourant();
> > DefaultMutableTreeNode node = findNodeOfEntite(courant);
> > TreeNode[] nodes = treeModel.getPathToRoot(node); TreePath
> > path = new TreePath(nodes);
> > this.scrollPathToVisible(path);
> > treeSelectionModel.setSelectionPath(path);
> > newEntiteCourante = true;
> > }
> > }
> >
> > et voilà.
> >
> > JL
> >
> > zeljko velaja wrote:
> > >
> > > A chaque objet métier tu pourrais associer une référence au noeud
> > > qui le représente. Tu n'aurais plus qu'à répercuter tes
> > > modifications sur le noeud et le recharger dans l'arborescence.
> > >
> > > -----Message d'origine-----
> > > De : Benoit ADAM [mailto:badlist@softeam.fr]
> > > Envoyé : jeudi 1 mars 2001 09:26
> > > À : java@u-strasbg.fr
> > > Objet : Arbre et modele
> > >
> > > Salut a tous,
> > >
> > > Je veux utiliser un JTree et un modele associé qui représente mes
> > > objets metiers qui sont hierarchiques. Suppposons, que je modifie
> > > autrment que par l'arbre, mon modele metier. Mon modele métier va
> > > alors envoyer un evenement que l'arbre va recuperer. Comment savoir
> > > quelle partie de l'arbre je dois rafraichir ? Intuitivement, a
> > > partir de l'evenement, je voulais recuperer l'objet metier modifié
> > > et puis récuperer le noeud (DefaultMutableTreeNode) dans lequel il
> > > est, mais la je n'ai aucun moyen de le faire (Le modele metier ne
> > > connait pas de classes graphiques) !
> > >
> > > Il y a pas mal d'exemples qui montrent comment quand on modifie un
> > > arbre, on repercute ca sur le modele, mais l'inverse ....
> > >
> > > Merci de votre aide.
> > >
> > > Ben