JCHECKBOXTREE : JTREE AVEC JCHECKBOX À CHAQUE NOEUD (SOURCE COMPLET)

Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015 - 27 déc. 2004 à 15:09
ingenior Messages postés 6 Date d'inscription mardi 27 décembre 2011 Statut Membre Dernière intervention 9 avril 2013 - 9 avril 2013 à 22:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28052-jcheckboxtree-jtree-avec-jcheckbox-a-chaque-noeud-source-complet

ingenior Messages postés 6 Date d'inscription mardi 27 décembre 2011 Statut Membre Dernière intervention 9 avril 2013
9 avril 2013 à 22:40
Bonjour, j'ai un prble dans le treeCellRender je veux avoir un tree avec des icons
et des checkbox pour les feuilles. alors que la fesabilité ne se fait que pour l'un ou l'autre cad ou bien j'ai les DefaultMitableTreeNode avec des icons ou bien les checkbox pour les
sous feuilles.quelqu'un peut m'aider svp
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
20 sept. 2011 à 09:34
Bonjour,

Dans ce genre de cas, il ne faut pas modifier le composant, mais ajouter un écouteur au modèle de sélection, qui selon l'évènement précis, appelerait une action ou une autre.

De souvenir : tree.getSelectionModel().addSelectionListener(monListener)
ou quelque chose d'approchant.
cs_xxLoloxx Messages postés 9 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 10 juillet 2012 2
19 sept. 2011 à 15:53
Bonjour,

Tout d'abord, un grand merci pour le code produit. Il m'a permis un grand mal de tête en moins.
Cependant la méthode valueChanged(TreeSelectionEvent e) permet de récupérer le changement lorsque l'on clique sur un node. Or je souhaiterais pousser ceci afin d'exécuter une action spécifique si le node est sélectionné (toujours après un clic) et une autre si il est déselectionné.
Je ne vois vraiment pas comment procéder (méthode à modifier, etc).

Je met quand même la note de 10 car le projet est vraiment utile.
Merci
naaserge Messages postés 1 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 18 février 2010
15 sept. 2009 à 09:46
Salut, le code proposer ici est tres interessant et je suis entrain de l'utiliser sur un projet, mais chose curieuse lorsque je rend le root invisible les noeuds ne s expendent plus, si quelqu'un pouvais m'aider dans la correction
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
31 mars 2009 à 16:36
Merci pour ce retour plus qu'enthousiaste.

Effectivement, depuis la version 5 de java, enum est un mot réservé et est utilisé pour déclarer les énumérations.

Effectivement également, il faudrait revoir le DefaultCheckboxTreeSelectionModel.
J'avais fait ça il y a un bout de temps, et pas encore eu le courage de le reprendre avec les dernières fonctionnalités de Java.

Depuis, j'ai appris pas mal de choses, donc je le reprendrai surement pour en faire quelque chose d'encore plus joli et pratique.
qfdreg Messages postés 1 Date d'inscription mardi 24 mars 2009 Statut Membre Dernière intervention 31 mars 2009
31 mars 2009 à 12:29
Bravo pour ce code qui "risque" d' m'être utile!! ;-)

2 petits détails cependant (valable sur mon PC/ma version de Java etc...) :

- Les variables notées enum de type Enumeration ne passent pas (logique!). Je les ai renommées en enum1.
- Lorsque l'arbre est entièrement sélectionné (avec le clic droit sur JCheckBoxTree) et que l'on déséléctionne (tjs avec le clic droit) les noeuds colors, sports et food, La CheckBox de JCheckBoxTreereste "sélectionnée mais grisée". Alors que ma logique voudrait que n'ayant plus rien de sélectionné JCheckBoxTree se déséléctionne.
La remarque est valable pour tout sous-arbre (comme food par exemple).

En tout cas bravo!
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
13 août 2008 à 21:05
Poumon & MLD_Valus> Merci, ca fait plaisir de savoir que ca sert ^^
Même après pratiquement 4 ans, on en parle encore ^^

MLD_Valus> Pour cocher tous les fils, il me semble que j'ai mis cette option dans mon SelectionModel. Une option Bunch (grappe), il me semble (j'ai la flemme d'aller chercher), non ?
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
13 août 2008 à 15:52
ça c'est sur que ça va aider, la preuve ça m'aide déja :p

j'ai tout implementé le modele et la méthode toggleSelectionPath pour inclure mes contraintes de sélection/déselection, ainsi que la possibilité de cocher tout les fils en cochant un noeud parent
cs_poumon Messages postés 5 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 13 août 2008
13 août 2008 à 15:49
Merci isammoc. J'ai suivi tes conseils et c'est tout bon. Si tu veux, je te ferais parvenir mes scripts (mais là c'est encore un peu fouilli...)
Il me reste juste à trouver comment executer un javascript quand on coche une case.
Je pense que ton script aura et va aider beaucoup de gens!Merci encore
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
13 août 2008 à 10:21
Poumon>
Oui, mais là, ca sort de mon exemple.
En fait, il va te falloir gérer ton propre TreeCellRenderer pour choisir les noeuds que tu vas mettre avec un checkbox ou non (facon apparente). Et un MouseListener qui vérifie quel noeud a été cliqué avec une action différente si c'est un noeud "normal" ou un noeud "checkbox".
Après, il y a aussi ce que tu veux comme retour...
cs_poumon Messages postés 5 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 13 août 2008
13 août 2008 à 08:48
Est ce que vous pensez qu'on peut créer un jtree mixte avec certains nodes en checkbox et d'autres en node "normal"?
cs_poumon Messages postés 5 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 13 août 2008
12 août 2008 à 16:37
Je viens de tester pour les icones.
J'arrive à les remplacer mais pas à les faire disparaitre. J'ai toujours les icônes par défaut de JTree.
Au pire, tu peux creer des png vides transparentes(pas testé). Si je trouve une meilleure info, je te fais signe!
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
12 août 2008 à 15:51
changes le listener pour remplacer le simple clic par un double clic ...

tu saurais me dire comment virer les icones après la checkbox (dossier pour le noeud et fichier pour la feuille ?) merci XD
cs_poumon Messages postés 5 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 13 août 2008
12 août 2008 à 15:47
Ton fonctionne bien. Par contre, je me suis servi de
if(!leaf){
this.remove(jcb);
}
return this;
} pour ne pas mettre de checkbox sur les dossiers.
L'ennui, c'est que je ne peux pas faire de double click sur les dossiers car ils sont traités comme des checkboxs au niveau du MouseListener.
Aurais tu un conseil à me donner?
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
12 août 2008 à 08:03
MLD-Valus>
Oui, tout ce système se passe dans le TreeSelectionModel. A toi de faire ta propre classe. Je suis interessé par une éventuelle classe ^^

Poumon>
Pas que je sache, donc si tu veux faire des retours, je suis preneur ^^
(Et sans problème pour l'utilisation)
cs_poumon Messages postés 5 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 13 août 2008
11 août 2008 à 22:07
Bonjour
Je pense que je vais m'inspirer de ce code pour un futur projet.
Est ce que quelqu'un l'a testé avec JRE 6?
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
7 mai 2008 à 11:41
est il possible de faire en sorte que lorsqu'un noeud ne contient qu une feuille et que la feuille est cochée, que le noeud soit coché également de maniere automatique ?
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
7 mai 2008 à 00:37
Je ne sais pas quel est le cas que tu désires.

Si c'est quand tu cliques sur un objet, (test1 par exemple) tous les objets du même type soit sélectionné (param A / test 1 et param 1 / test 1), il faut que tu changes le TreeSelectionModel. Regarde dans le zip, tu dois en avoir un CheckBoxTreeSelectionModel.

Sinon, si tu veux juste éviter ton message, quand tu implémentes ton TreeSelectionListener (la méthode valueChanged), tu récupères un ou des TreePath, et tu dois faire attention à tous les objets du chemin, pas seulement au dernier qui est getLastPathComponent, mais à tout le chemin complet.

Tu as des tutoriaux divers et variés sur le net avec un JTree, cela fonctionne de la même manière.
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
6 mai 2008 à 09:32
en fait j'ai gardé le code tel qu'il est dans le fichier ZIP. Je débute en java et j'ai vraiement du mal a faire celà, aurais tu un exemple de source dont je pourrais m'inspirer ?

cordialement


Valentin
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
5 mai 2008 à 22:45
Euh, je ne vois pas trop ce que tu entends par là.

A mon humble avis, il faudrait que tu implémentes ton propre TreeSelectionModel pour que ca marche selon tes besoins.

Ce que je suppose :
C'est que tu a implémenter un TreeSelectionListener qui ne fait attention qu'au dernier noeud du TreePath selectionné. Alors que dans le TreeSelectionModel, c'est bien CE noeud là (avec toute ses parents dans cet ordre là) qui est sélectionné.

En gros, ce n'est pas parce que tu as le même objet au final, qu'il passe par le même chemin pour l'afficher et donc le sélectionner.

Je t'invite à implémenter ton propre TreeSelectionModel, ou au contraire, de vérifier le TreePath complet dans ton TreeSelectionListener
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
5 mai 2008 à 14:50
j'ai encore un point de détail sur lequel je butte depuis quelques jours. je vais essayer de m'expliquer clairement. Le JTree est rempli au démarage du programme avec des données contenues dans un fichier xml. Jusque la tout est ok.

la structure des données est la suivante :

+ param A
--+test 1
--+test 2
--+test 3
--+test 4


+ param 1
--+test 1

+ param2
--+test 2

....

en gros j ai un noeud avec de multiples parametres a tester, et des noeuds contenant chacun un des parametres du noeud multi.

ce que j'aimerais réaliser c'est un test, l'utilisateur peut choisir de selectionner tous les parametres (le noeud multi) ou plusieurs simple parametres... car il existe des parametres simples pas présents dans le multi

j'ai réalisé les fonctions pour tester et elles marchent, j'arrive a afficher :

" Test globules rouges déja séléctionné ! "

le souci c'est qu'apres avoir affiché le message, la caze se coche quand même ...

comment faire ?
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
9 avril 2008 à 11:33
Euh... Tu as touché à MON code ???

Le but c'est que tu face ton propre SelectionListener...
Qui serait ajouté à tous les SelectionListener...

Normalement, aucunement besoin de toucher à mon code, (peut etre pour enlever un System.out.println() mais c'est tout)
Le but du BUNCH ( = grappe) c'est justement de changer la sélection depuis la racine jusqu'à celui que tu as cliqué...
Mets le CheckBoxTreeSelectionModel dans le mode ALONE pour ne pas sélectionné tous les parents jusqu'à la racine mais uniquement celui que tu as cliqué...

Mais sinon, je ne sais pas.
Vu que le code source originel ne m'appartient pas, (c'est celui de sun et il n'était pas encore libre).
Si ce n'est que mon code, oui tu peux l'utiliser commercialement, je l'ai d'ailleurs mis ici pour qu'il soit utilisé par d'autres personnes (commercial ou non).

Pour ce qui est de mon propre code , c'est du code libre sous GPL 2 ou version supérieure.
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
9 avril 2008 à 09:46
effectivement ça marche mais j'ai du mettre en commentaire une partie du reste de la méthode :

/*
if (this.mode == CheckBoxTreeSelectionModel.BUNCH_MODE)
{
TreePath os[] = event.getPaths();
Vector v = new Vector();
for (int i = 0; i < os.length; i++)
{
if (os[i].getParentPath() != null)
{
v.add(os[i].getParentPath());
}
}
if (v.size() > 0)
{
boolean[] bb = new boolean[v.size()];
Object[] paths = v.toArray();
TreePath[] tps = new TreePath[v.size()];
for (int i = 0; i < v.size(); i++)
{
bb[i] = true;
tps[i] = (TreePath)paths[i];
System.out.println("test 1:"+paths[i].toString());

}
System.out.println(v.toArray());
this.valueChanged(new TreeSelectionEvent(this.dtsm, tps, bb,
e.getOldLeadSelectionPath(), e.getNewLeadSelectionPath()));
}
}*/

car sinon il me renvoyais trois objets :

-le noeud selectionné (celui que je souhaite utiliser)
-le noeud parent
-le noeud racine

maintenant ça fonctionne tres tres bien et je suis content :) j'espere ne pas avoir besoin de re-demander des conseils:D

merci pour le lien qui m'aide beaucoup !

je te note 10/10

PS : est il possible d'utiliser cette source dans un programme qui sera distribué par mon entreprise ?

thank you

cheers !
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
8 avril 2008 à 17:51
void valueChanged(TreeSelectionEvent e) {
TreePath[] paths = e.getPaths();
for(int i = 0; i < paths.length; i ++) {
Object o = paths[i].getLastPathComponent();
System.out.println("Objet de type : " + o.getClass() + "; valeur = " + o);
}
}

Ca, ca marche ?
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
8 avril 2008 à 15:48
en fait voila ce que j'aimerais faire (en gros).

dans un JCheckBoxTree j'ai une liste d'elements de ce type :

[]Noeud1
[]fils 1
[]fils2
[]fils3
[]Noeud2
[]fils1


j'aimerais que lors d'une selection (quand on coche la checkbox) je puisse récuperer l'user object associé.

j'ai essayé avec
Object _lastSelected = ((Object)_fils.getLastSelectedPathComponent());

mais ceci me renvoie toujours le même objet ...(le premier que j ai cliqué).
mais ceci me renvoies toujours le même
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
8 avril 2008 à 15:28
Désolé du double post, mais voilà un lien qui pourra t'être utile...
http://java.sun.com/docs/books/tutorial/uiswing/events/treeselectionlistener.html
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
8 avril 2008 à 15:23
Quand il est cliqué ? ou quand il est sélectionné/déselectionné ?

valueChanged a comme paramètre un TreeSelectionEvent
qui te permet de savoir les différents paths qui sont touchés par la modification.
Chaque path te permet de récupérer l'objet au bon endroit, apres, tu peux en faire ce que tu veux...

Sinon, envoie ici la portion de code...

Ca peut m'aider aussi à comprendre ton problème.
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
8 avril 2008 à 09:46
j'ai encore une petite question a te poser Isammoc!

voila j'ai cree un JCheckBoxTree en ajoutant à chaque noeud un Objet. J'aimerais que lorsque je clique sur un noeud, je puisse acceder a une méthode de l'objet coché. J'essaies de manipuler la méthode valueChanged de la classe DefaultCheckBoxTreeSelectionModel mais sans grand succes jusqu'a présent.

Pourrais tu me venir en aide ?

merci
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
3 avril 2008 à 12:45
Ca, c'est lié au JTree lui meme.
Il faut changer le TreeCellRenderer
Regarde les tutos pour les JTree. Ca doit etre la meme chose.

Cordialement,
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
3 avril 2008 à 11:17
j'ai réussi finallemnt (le code est compatible avec la nouvelle version) mais la question que je me pose est la suivante :

est il possible d'enlever les icones du JTree (celles qui représente le noeud et la feuille apres la checkbox) ? si oui comment faut-il proceder ?

cordialement, valus
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
3 avril 2008 à 11:14
Bonjour,
De base, je dirai de l'utiliser pratiquement comme un JTree normal.

Il faudrait que tu me donnes un bout de ton code pour que je comprenne ce qui ne va pas.

De plus, je pense que ce code n'est plus valable avec les nouvelles JVM... Il faudrait que je regarde à nouveau pour le mettre à jour.

PS: J'ai peut-être l'idée qu'il faut donner une taille minimal et/ou une taille préférée pour l'intégrer à un JScrollPane.
As-tu essayé ce composant sans fioriture ? (le tester dans une fenêtre tout seul, par exemple)

Bon courage,
MLD_Valus Messages postés 12 Date d'inscription jeudi 28 septembre 2006 Statut Membre Dernière intervention 24 mars 2009
2 avril 2008 à 11:36
bonjour ! pouvez vous m'expliquer comment integrer ce JTree a une JScrollPane déja éxistante ? j'essaies de faire un maJscroll.add(jt); mais le tree ne s'affiche pas .

Cordialement,

Valentin
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
20 avril 2007 à 13:29
Oui, c'est possible, il faut regarder les options disponibles du DefaultCheckBoxTreeSelectionModel.setSelectionMode(int mode)
et mettre le mode à CheckBoxTreeSelectionModel.ALONE_MODE si je ne m'abuse

depuis ton arbre tree :
((DefaultCheckBoxTreeSelectionModel)tree.getSelectionModel()).setSelectionMode(CheckBoxTreeSelectionModel.ALONE_MODE);


Enfin, d'après mes souvenirs... Ca fait un bout de temps.
ced46 Messages postés 1 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 20 avril 2007
20 avril 2007 à 13:15
En selectionnant un noeud, est il possible que tous les enfants ne soit pas selectionnés? si oui, comment modifier le code?

Merci
ben_abid Messages postés 7 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 4 octobre 2006
27 sept. 2006 à 23:31
Bonsoir,
Merci beaucoup pour ta réponse, Pas la peine de s'excuser.
Bon courage pour ton boulot.
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
27 sept. 2006 à 18:17
Euh, cela fait longtemps que je ne me suis pas plongé dans le code...
Mais cela me parait bizarre que tu puisse avoir des noeuds selectionné (en bleu)...
Je pensais avoir fait en sorte que non...

Recupere le SelectionModel, et vérifies bien que c'est CheckBoxTreeSelectionModel
si oui, bah, regarde les selections sur celui là, sinon, c'est qu'il y a un soucis...

Désolé de ne pas pouvoir t'aider plus que ca, je suis débordé dans mon boulot.
Toutes mes excuses
ben_abid Messages postés 7 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 4 octobre 2006
27 sept. 2006 à 17:16
Bonjour,
tree.getSelectionPath(): me retourne le premier noeud séléctionné (en bleu) qu'il soit coché ou pas. Y aurai il un moyen pour récupérer directement à partir de "Jtree" les checkbox cochés : tree.????
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
27 sept. 2006 à 16:50
"checkbox cochés ( et non pas séléctionnée)"

Comment ca ?

Les cellules selectionnées sont celles qui sont cochées, c'était le but de mon petit objet...

Peux tu préciser ta question ?
ben_abid Messages postés 7 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 4 octobre 2006
27 sept. 2006 à 11:52
Bonjour,
Je voulais savoir comment pourrai je récupérer les valeus des checkbox cochés ( et non pas séléctionnée) d'un Jtree.
Merci d'avance
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
7 déc. 2005 à 11:42
Tu regardes les tutoriels pour les JTree.. C'est exactement la meme chose
bullgr82 Messages postés 9 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 6 décembre 2005
6 déc. 2005 à 22:46
Y'a pas de problème, si j'y arrive, je t'enverrai le code.
Par contre, je vais encore t'embêter mais comment je fais pour changer les icones ?
Si par exemple dans mon arbre, j'ai un fichier pdf, je voudrais lui associer une image pdf. De même si c'est un fichier html, j'aimerai lui associer une icone html.
merci encore
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
1 déc. 2005 à 00:50
Tout ca est fort possible...

Si tu arrive à le faire, envoie moi les fichiers sur isammoc (chez) yahoo (point) fr

Je le mettrai en ligne et ca profitera à tout le monde
bullgr82 Messages postés 9 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 6 décembre 2005
30 nov. 2005 à 15:51
Je te remercie, j'ai effectivement réussi avec un getSelectionModel et un addSelectionPath(path)
Ne subsiste qu'un léger problème de propagation des sélections.
Quand je sélectionne un noeud, pas de problème tout se sélectionne. De même si je déselectionne un élément après une sélection totale, j'ai bien la case sélectionnée en grisé (sélection partielle).
Par contre si dans mon arbre, je n'ai rien de sélectionné et que j'en sélectionne une, la case du noeud parent ne se sélectionne pas en grisé. De plus, si je sélectionne un à un tous les fils d'un noeud, celui-ci n'est pas sélectionné.
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
30 nov. 2005 à 12:03
Oula... Faut vraiment que je replonge dans mon code...

Ca doit etre comme dans un JTree classique, puisque mon but était de refaire la meme chose...

Si je me souviens bien, il faut récupérer le modèle de sélection (getSelectionModel sur l'arbre) et faire un addSelectionPath(path)
avec path, le chemin de ton objet à sélectionner.
bullgr82 Messages postés 9 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 6 décembre 2005
30 nov. 2005 à 11:20
J'ai encore une question.
Je suis un petit peu perdu dans ton code aussi j'aimerai savoir comment tu fais pour cocher une CheckBox du JCheckBoxTree sur déclenchement d'un évènement extèrieur.
Par exemple, j'ai des checkbox ".doc",".xls",etc
Et sur sélection/désélection de ces CheckBox, je voudrais cocher dans le JCheckBoxTree les feuilles dont le nom est par exemple "fichier1.doc" ou "fichier2.xls".
J'arrive plus ou moins à me promener dans l'arbre mais je ne sais comment accéder à la CheckBox.
Merci encore pour ton aide.
bullgr82 Messages postés 9 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 6 décembre 2005
30 nov. 2005 à 11:03
Merci beaucoup :)
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
29 nov. 2005 à 18:30
Ah oui!!! Ca y est, je m'en souviens
Dans le test, j'ai oublié d'enlever un truc... Voila c'est arrangé
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
26 nov. 2005 à 16:47
Bizarre autant qu'étrange...

Je vais voir ce que je peux faire, dès que j'aurais formater mon windows, lol
bullgr82 Messages postés 9 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 6 décembre 2005
26 nov. 2005 à 12:23
Voilà ce que j'obtiens en compilant ton code : http://laurentmanciet.free.fr/JTreedouble.jpg
bullgr82 Messages postés 9 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 6 décembre 2005
24 nov. 2005 à 09:46
Je me suis dit que cela pouvait venir de l'ordinateur sur lequel j'ai testé ton exemple mais en testant chez moi j'obtiens la même chose.
Est-ce que cela peut venir de la version de java utilisée ?
Normalement, l'environnement sur lequel je le fait tourner ne devrait pas influer.
J'essaierai de mettre une image de ce que j'obtiens pour que tu vois mieux.
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
23 nov. 2005 à 15:16
Euh... Il me semble bien que ca marche correctement...
bullgr82 Messages postés 9 Date d'inscription jeudi 20 octobre 2005 Statut Membre Dernière intervention 6 décembre 2005
23 nov. 2005 à 11:16
Salut et merci pour le code, j'en avais justement besoin pour une application.
Par contre, j'aimerais savoir si le screenshot que tu as mis correspond bien à cette version du code car quand j'exécute celui-ci, j'obtiens deux checkbox l'une à côté de l'autre au lieu d'une seule. De plus lors d'une sélection partielle, je n'ai pas la checkbox cochée en gris à côté du parent.

j'ai essayé la compilation sous jbuilder et sous eclipse mais le résultat est le même.

Merci d'avance
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
19 sept. 2005 à 00:04
Oui, je suis preneur pour de telles options, tant que ca reste compatible avec un JTree
cs_brous Messages postés 1 Date d'inscription mercredi 8 novembre 2000 Statut Membre Dernière intervention 16 septembre 2005
16 sept. 2005 à 21:32
merci pour le code, j'ai ajouté une option permettant de ne mettre en checkbox que les feuilles.

pour ce faire, dans CheckBoxTreeCellRenderer,
modifier la méthode getTreeCellRendererComponent
à la fin : remplacer "return this;" par :
if(!leaf){
this.remove(jcb);
}
return this;
}

il faut aussi supprimer la propagation par un :
defaultCheckboxTreeSelectionModel.setSelectionMode(DefaultCheckboxTreeSelectionModel.ALONE_MODE);

bravo pour le code

je peux rendre propre l'option que j'utilise si cela intéresse l'auteur initial.

cela signifierait créer une option dans CheckBoxTreeSelectionModel.

A+
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
20 mai 2005 à 14:25
Au moins, cela aura été utile à quelqu'un...

Mes sources sont en regle général un léger copier coller des sources disponibles de chez sun. (il me semble qu'on peut les reprendre si on a besoin de les modifier, si tel n'est pas le cas, qu'on me le dise)

Sinon, tu peux savoir si tel objet est sélectionné ou pas. Donc tu peux (toi meme) faire un tableau des TreePath de tes objets feuilles et demander à chaque fois ci c'est sélectionné ou pas.

Un écouteur sur les sélections est possible également.

Bon courage. Et si tu as du code, n'hésite pas :)
wenders77 Messages postés 7 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 20 mai 2005
20 mai 2005 à 12:16
Salut Isammoc et merci infiniment pour ton code: c'est exactement ce que je cherchais et, à part le bug que tu as signalé, ça marche parfaitement.

Par contre, tes sources sont très conséquentes (faut ce qu'il faut!) et, comme tu le dis toi-même, pas parfaitement commentée. Je me pose donc des questions sur les TreeSelectionModel.

Perso, je voudrais savoir uniquement si les noeuds terminaux (les feuilles) ont été sélectionnées ou non, et récupérer l'info dans un tableau de booléens. Est-ce que tu pourrais me dire comment faire s'il te plait?

D'avance merci,

Wenders
Isammoc Messages postés 39 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 5 septembre 2015
27 déc. 2004 à 15:09
Merci de laisser votre avis, vos commentaires, etc...
Rejoignez-nous