Sélectionner un chemin dans un jtree [Résolu]

pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 23 nov. 2008 à 16:58 - Dernière réponse : pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention
- 25 nov. 2008 à 23:51
Bonjour,
Dans mon programme, si un noeud "n" est sélectionné dans arbre jTree1, tous ses noeuds parents doivent l'être aussi automatiquement. Pour cela, j'ai fait le code suivant:

   DefaultMutableTreeNode  node = (DefaultMutableTreeNode) jTree1.getLastSelectedPathComponent();
   TreePath  path = new TreePath (node.getPath());
   jTree1.addSelectionPath(path.getParentPath());

Le problème est qu'il ne me sélectionne que le parent direct du noeud et pas les autres parents. Comment faire pour sélectionner tous les parents?

Un autre problème est qu'il faut que mon arbre permettent une sélection multiple

jTree1.getSelectionModel().setSelectionMod (TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);

mais lorsque je sélectionne deux noeuds en même temps,  le jTree1.getLastSelectedPathComponent() ne renvoie pas le dernier noeud sélectionné mais celui d'avant.

Quels est le problème SVP?
Merci pour votre aide.
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 24 nov. 2008 à 20:32
3
Merci
Tu as raison, je n'y avais plus pensé. J'avais fais les corrections dans le temps. Le mieux c'est que je te donne les sources telles que je les utilise actuellement:
http://www.java-forum.org/de/userfiles/user3690/treeSupport.zip

Merci uhrand 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de uhrand
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 23 nov. 2008 à 17:59
0
Merci
Voici une très belle alternative que j'ai déjà utilisé avec succès dans une application de production et qui fonctionne parfaitement: un JTree avec CheckBoxes. Quand on coche un noeud, tous  les noeuds parents sont cochés également!
http://www.jroller.com/santhosh/date/20050610
Commenter la réponse de uhrand
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 24 nov. 2008 à 19:41
0
Merci
Merci uhrand pour ta réponse. C'est vrai que c'est nettement mieux avec les checkbox.
J'ai juste un petit problème avec la classe "getTreeCellRendererComponent", plus précisément au niveau de l'instruction:
   checkBox.setState(Boolean.TRUE);   

setState n'accèpte pas le type Boolean comme argument mais un State.
Et c'est la meme chose avec l'instruction:

checkBox.setState(selectionModel.isPartiallySelected(path) ? null : Boolean.FALSE);

Comment faire pour résoudre ce problème?
Merci pour votre aide.
Commenter la réponse de pseudo85
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 24 nov. 2008 à 22:05
0
Merci
Merci beaucoup uhrand, ça marche super bien, c génial.


Encore une question, je veux avoir tous les noeuds sélectionnés (donc dans ce cas tous les noeuds cochés). D'habitude, pour avoir ça, je fais:


    TreePath[] paths = jTree1.getSelectionPaths();
     
Avec cette instruction, je n'ai que les chemins qui sont selectionnés, et pas ceux dont les noeuds sont cochés. Comment faire pour avoir les noeuds qui sont cochés?

Merci pour votre aide.
Commenter la réponse de pseudo85
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 25 nov. 2008 à 07:29
0
Merci
checkedPaths = checkTreeManager.getSelectionModel().getSelectionPaths();
Commenter la réponse de uhrand
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 25 nov. 2008 à 12:27
0
Merci
Pardon uhrand, je sais que j'exagère, mais comment déclarer le "checkTreeManager"?
Merci.
Commenter la réponse de pseudo85
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 25 nov. 2008 à 14:15
0
Merci
Désolé, il suffit juste de faire:
// makes your tree as CheckTree
CheckTreeManager checkTreeManager = new CheckTreeManager(yourTree);

// to get the paths that were checked
TreePath checkedPaths[] = checkTreeManager.getSelectionModel().getSelectionPaths();

Merci encore uhrand pour ton aide.
Commenter la réponse de pseudo85
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 25 nov. 2008 à 14:57
0
Merci
Bonjour,
Encore une question, j'ai remarqué que cette instruction:
checkedPaths = checkTreeManager.getSelectionModel().getSelectionPaths();

ne donne pas les chemins en entier (jusqu'au feuilles) qui sont obtenus en cochant un noeud parent, et donc automatiquement ses noeuds fils sont sélectionnés. Cette instruction ne donne pas le chemin complet (le chemin ne va pas jusqu'au fils).
Je ne comprend pas pourquoi?
Merci pour votre aide.
Commenter la réponse de pseudo85
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 25 nov. 2008 à 17:16
0
Merci
Oui, c'est un peu déroutant, mais c'est voulu ainsi: un noeud sélectionné signifie automatiquement que les enfants sont sélectionnés également. En fait, ce serait une redondance de retourner explicitement tous les enfants.
Commenter la réponse de uhrand
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 25 nov. 2008 à 17:53
0
Merci
Salut,
Tu veux dire qu'il n'y a pas moyen de retourner tous noeuds qui sont cochés (ceux qui sont cochés par l'utilisateur, et ceux qui sont cochés automatiquement)? Parce que dans mon programme, j'ai besoin d'avoir tous les noeuds cochés.
Merci.
Commenter la réponse de pseudo85
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 25 nov. 2008 à 19:12
0
Merci
En fait, c'est assez simple: si le dernier noeud du chemin retourné n'est pas une feuille, il suffit de parcourir ses enfants pour avoir les noeuds cochés.
Commenter la réponse de uhrand
pseudo85 64 Messages postés mardi 7 février 2006Date d'inscription 17 juillet 2009 Dernière intervention - 25 nov. 2008 à 23:51
0
Merci
Oui c'est vrai c'est simple. Merci uhrand.
Commenter la réponse de pseudo85

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.