j'ai une fenetre avec un JTree et je souhaiterais modifier la méthode de ce
JTree pour qu'il m'affiche le contenu d'une ArrayList.
Ainsi si je fais varier le contenu de l'Arraylist l'affichage de JTree
change aussi.
Mon probleme est que lorsque je fais comme ca, lorsque j'ajoute un élément à
l'arbre et bien il rappelle une méthode repaint() vu que son contenu a
changer... et donc il rajoute indéfiniment les éléments de l'ArrayList.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Philippe Martin
Bonjour,
j'ai une fenetre avec un JTree et je souhaiterais modifier la méthode de ce
JTree pour qu'il m'affiche le contenu d'une ArrayList.
Ainsi si je fais varier le contenu de l'Arraylist l'affichage de JTree change aussi.
Mon probleme est que lorsque je fais comme ca, lorsque j'ajoute un élément à
l'arbre et bien il rappelle une méthode repaint() vu que son contenu a changer... et donc il rajoute indéfiniment les éléments de l'ArrayList.
Une idée ?
Merci d'avance.
En fait j'arrivais pas a supprimer un élément... maintenant c'est bon... J'enleve tout et je rajoute tout dans l'arbre lors du repaint de la fenetre contenant l'arbre et pas dans la méthode paint() de l'arbre...
ps: pour ceux que ca tracassait ;o)
Bonjour,
j'ai une fenetre avec un JTree et je souhaiterais modifier la méthode de
ce
JTree pour qu'il m'affiche le contenu d'une ArrayList.
Ainsi si je fais varier le contenu de l'Arraylist l'affichage de JTree
change aussi.
Mon probleme est que lorsque je fais comme ca, lorsque j'ajoute un élément
à
l'arbre et bien il rappelle une méthode repaint() vu que son contenu a
changer... et donc il rajoute indéfiniment les éléments de l'ArrayList.
Une idée ?
Merci d'avance.
En fait j'arrivais pas a supprimer un élément... maintenant c'est bon...
J'enleve tout et je rajoute tout dans l'arbre lors du repaint de la fenetre
contenant l'arbre et pas dans la méthode paint() de l'arbre...
j'ai une fenetre avec un JTree et je souhaiterais modifier la méthode de ce
JTree pour qu'il m'affiche le contenu d'une ArrayList.
Ainsi si je fais varier le contenu de l'Arraylist l'affichage de JTree change aussi.
Mon probleme est que lorsque je fais comme ca, lorsque j'ajoute un élément à
l'arbre et bien il rappelle une méthode repaint() vu que son contenu a changer... et donc il rajoute indéfiniment les éléments de l'ArrayList.
Une idée ?
Merci d'avance.
En fait j'arrivais pas a supprimer un élément... maintenant c'est bon... J'enleve tout et je rajoute tout dans l'arbre lors du repaint de la fenetre contenant l'arbre et pas dans la méthode paint() de l'arbre...
ps: pour ceux que ca tracassait ;o)
Vincent Cantin
En fait j'arrivais pas a supprimer un élément... maintenant c'est bon... J'enleve tout et je rajoute tout dans l'arbre lors du repaint de la fenetre
contenant l'arbre et pas dans la méthode paint() de l'arbre...
ps: pour ceux que ca tracassait ;o)
En effet, ca me tracasse ... mais pas le debut mais plutot ce que tu es en train de faire la maintenant. Tu connais l'interface javax.swing.tree.TreeModel ? Tu sais que tu peux specifier toi-meme le contenu de l'arbre en implementant cette interface et
en la donnant pour model a l'arbre ?
Je te conseille de lire plus en detail la documentation de l'api java, et surtout d'aller voir les tutorials pour les JTree sur le web sur le site de
sun : http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
Bon courage, Vincent
En fait, je souhaite dessiner le contenu d'une liste d'une autre classe. Cette liste peut changer dynamiquement et la seule maniere pour l'arbre d'afficher le bon contenu, c'est de la reafficher completement non ?
En fesant ca, tu doit faire une copie complete des references des elements de la liste vers le model par default de l'arbre...
Ce n'est pas le seule moyen, il y a une autre maniere : Cree une class genre celle la :
public class ListTreeModel implements TreeModel {
////////////// Implementation of the TreeModel interface ///////////////
protected Vector treeModelListeners = new Vector();
public void addTreeModelListener(TreeModelListener listener) { treeModelListeners.add(listener); }
public void removeTreeModelListener(TreeModelListener listener) { treeModelListeners.remove(listener); }
public void valueForPathChanged(TreePath path, Object newValue) { // rien a faire ici }
public Object getRoot() { return myList; }
public Object getChild(Object parent, int index) {
public boolean isLeaf(Object node) { if (node == myList) return false; else return true; }
////////// End of implementation of the TreeModel interface ////////////
protected List myList;
public ListTreeModel(List myList) { this.myList = myList; }
/** * This notify all the treeModel listeners that their data and state need * to be reloaded from the model. */ public void refreshAllTrees() { TreeModelEvent event = new TreeModelEvent(this, new TreePath(myList)); for (int i = 0; i < treeModelListeners.size(); i++) ((TreeModelListener) treeModelListeners.get(i)).treeStructureChanged(event); }
}
Ensuite, tu dis a l'instance de ton JTree que ce qu'il doit afficher est specifie dans ce model : JTree tree = new JTree(); ListTreeModel model = new ListTreeModel(myList); tree.setModel(model);
La, chaque fois que ta liste change, appel "model.refreshAllTrees();" Il y peut-etre a moyen de demander a ta liste d'etre averti quand son contenu change, non ? Je ne connais pas ta liste, alors j'en sais rien.
En bref, de cette maniere, tu n'as besoin de copier les references de la liste vers le model par defaut de l'arbre.
-------- Je pense que je ne pourrais pas continuer a t'aidre, je suis surcharge de travail, la.
Bon courage, Vincent
En fait j'arrivais pas a supprimer un élément... maintenant c'est bon...
J'enleve tout et je rajoute tout dans l'arbre lors du repaint de la
fenetre
contenant l'arbre et pas dans la méthode paint() de l'arbre...
ps: pour ceux que ca tracassait ;o)
En effet, ca me tracasse ... mais pas le debut mais plutot ce que tu es en
train de faire la maintenant.
Tu connais l'interface javax.swing.tree.TreeModel ? Tu sais que tu peux
specifier toi-meme le contenu de l'arbre en implementant cette interface
et
en la donnant pour model a l'arbre ?
Je te conseille de lire plus en detail la documentation de l'api java, et
surtout d'aller voir les tutorials pour les JTree sur le web sur le site
de
sun : http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
Bon courage,
Vincent
En fait, je souhaite dessiner le contenu d'une liste d'une autre classe.
Cette liste peut changer dynamiquement et la seule maniere pour l'arbre
d'afficher le bon contenu, c'est de la reafficher completement non ?
En fesant ca, tu doit faire une copie complete des references des elements
de la liste vers le model par default de l'arbre...
Ce n'est pas le seule moyen, il y a une autre maniere :
Cree une class genre celle la :
public class ListTreeModel
implements TreeModel
{
////////////// Implementation of the TreeModel interface ///////////////
protected Vector treeModelListeners = new Vector();
public void addTreeModelListener(TreeModelListener listener)
{
treeModelListeners.add(listener);
}
public void removeTreeModelListener(TreeModelListener listener)
{
treeModelListeners.remove(listener);
}
public void valueForPathChanged(TreePath path, Object newValue)
{
// rien a faire ici
}
public Object getRoot()
{
return myList;
}
public Object getChild(Object parent, int index)
{
public boolean isLeaf(Object node)
{
if (node == myList)
return false;
else
return true;
}
////////// End of implementation of the TreeModel interface ////////////
protected List myList;
public ListTreeModel(List myList)
{
this.myList = myList;
}
/**
* This notify all the treeModel listeners that their data and state need
* to be reloaded from the model.
*/
public void refreshAllTrees()
{
TreeModelEvent event = new TreeModelEvent(this, new TreePath(myList));
for (int i = 0; i < treeModelListeners.size(); i++)
((TreeModelListener)
treeModelListeners.get(i)).treeStructureChanged(event);
}
}
Ensuite, tu dis a l'instance de ton JTree que ce qu'il doit afficher est
specifie dans ce model :
JTree tree = new JTree();
ListTreeModel model = new ListTreeModel(myList);
tree.setModel(model);
La, chaque fois que ta liste change, appel "model.refreshAllTrees();"
Il y peut-etre a moyen de demander a ta liste d'etre averti quand son
contenu change, non ?
Je ne connais pas ta liste, alors j'en sais rien.
En bref, de cette maniere, tu n'as besoin de copier les references de la
liste vers le model par defaut de l'arbre.
--------
Je pense que je ne pourrais pas continuer a t'aidre, je suis surcharge de
travail, la.
En fait j'arrivais pas a supprimer un élément... maintenant c'est bon... J'enleve tout et je rajoute tout dans l'arbre lors du repaint de la fenetre
contenant l'arbre et pas dans la méthode paint() de l'arbre...
ps: pour ceux que ca tracassait ;o)
En effet, ca me tracasse ... mais pas le debut mais plutot ce que tu es en train de faire la maintenant. Tu connais l'interface javax.swing.tree.TreeModel ? Tu sais que tu peux specifier toi-meme le contenu de l'arbre en implementant cette interface et
en la donnant pour model a l'arbre ?
Je te conseille de lire plus en detail la documentation de l'api java, et surtout d'aller voir les tutorials pour les JTree sur le web sur le site de
sun : http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html
Bon courage, Vincent
En fait, je souhaite dessiner le contenu d'une liste d'une autre classe. Cette liste peut changer dynamiquement et la seule maniere pour l'arbre d'afficher le bon contenu, c'est de la reafficher completement non ?
En fesant ca, tu doit faire une copie complete des references des elements de la liste vers le model par default de l'arbre...
Ce n'est pas le seule moyen, il y a une autre maniere : Cree une class genre celle la :
public class ListTreeModel implements TreeModel {
////////////// Implementation of the TreeModel interface ///////////////
protected Vector treeModelListeners = new Vector();
public void addTreeModelListener(TreeModelListener listener) { treeModelListeners.add(listener); }
public void removeTreeModelListener(TreeModelListener listener) { treeModelListeners.remove(listener); }
public void valueForPathChanged(TreePath path, Object newValue) { // rien a faire ici }
public Object getRoot() { return myList; }
public Object getChild(Object parent, int index) {
public boolean isLeaf(Object node) { if (node == myList) return false; else return true; }
////////// End of implementation of the TreeModel interface ////////////
protected List myList;
public ListTreeModel(List myList) { this.myList = myList; }
/** * This notify all the treeModel listeners that their data and state need * to be reloaded from the model. */ public void refreshAllTrees() { TreeModelEvent event = new TreeModelEvent(this, new TreePath(myList)); for (int i = 0; i < treeModelListeners.size(); i++) ((TreeModelListener) treeModelListeners.get(i)).treeStructureChanged(event); }
}
Ensuite, tu dis a l'instance de ton JTree que ce qu'il doit afficher est specifie dans ce model : JTree tree = new JTree(); ListTreeModel model = new ListTreeModel(myList); tree.setModel(model);
La, chaque fois que ta liste change, appel "model.refreshAllTrees();" Il y peut-etre a moyen de demander a ta liste d'etre averti quand son contenu change, non ? Je ne connais pas ta liste, alors j'en sais rien.
En bref, de cette maniere, tu n'as besoin de copier les references de la liste vers le model par defaut de l'arbre.
-------- Je pense que je ne pourrais pas continuer a t'aidre, je suis surcharge de travail, la.