Problème pour garder un noeud ouvert dans JTree [Résolu]

Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
- - Dernière réponse : Darf33
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
- 14 août 2012 à 09:13
Bonjour,

je code actuellement une arborescence de fichier.
Cette arborescence est créée à partir de la méthode FileSystemView.getFileSystemView().getHomeDirectory() afin d'avoir la même structure que celle sous Windows.

Elle fonctionne bien mais j'aurais besoin de garder le nœud "Bureau" tout le temps ouvert.
J'ai essayé la méthode expandPath() lors de la création de l'arborescence mais elle ne fonctionne pas car l'évènement TreeSelectionEvent est nulle.

Existe-t'il une solution pour définir un nœud qui ne peut pas se fermer ?

Voici l'image de mon arborescence :
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
3
Merci
autant pour moi, je me suis trompé... ce n'est pas dans le constructeur qu'il y a un soucis...

c'est dans une de tes classes appelées suite à l'expansion de ton arbre...

gseSrc.graphics.explorer.Explorer.treeWillExpand(Explorer.java:286)
> gseSrc.graphics.Window.queueEvent(Window.java:193)
> gseSrc.controller.Controller.check_event(Controller.java:70)

va donc voir la ligne 70 de ta classe Controller...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 144 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cormandyr
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
0
Merci
Salut,

pour "l'ouverture" des noeuds, c'est plus avec le TreeExpansionListener que tu dois regarder
Commenter la réponse de cormandyr
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
0
Merci
Je me sers déjà de TreeExpansionListener. Mais mon but étant d'avoir "Bureau" tout le temps ouvert avec pourquoi pas l'impossibilité de le fermer.
Commenter la réponse de Darf33
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
0
Merci
Tu peux vérifier lors de l'appel de la méthode treeCollapsed(..) qu'il ne s'agit pas de ton root...
en encore, et peut-être plus simple, faire en sorte que à chaque fermeture d'un noeud (donc toujours dans la méthode treeCollapsed(...)) tu forces l'affichage de la descendance de ta racine...
tu peux faire cela via la méthode expandRow(...) . Je pense que, pour etre complet, la commande serait meme:
tree.expandRow(1);
Commenter la réponse de cormandyr
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
0
Merci
Une fois que "Bureau" est ouvert je n'ai pas de problème c'est juste qu'après la création de l'arbre ce nœud est fermé.
J'ai essayé t'as solution et une autre qui est makevisible() directement dans le constructeur mais sans succès. J'affiche mon arbre dans un JScrollPane.
Commenter la réponse de Darf33
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
0
Merci
Bon visiblement c'est plutôt tree.expandRow(0) qu'il faudrait que je marque vu que je veux étendre la première ligne visible de l'arbre (le bureau).
Malheureusement j'ai une exception qui se lève : NullPointerException.
Exception in thread "main" java.lang.NullPointerException
at gseSrc.controller.Controller.check_event(Controller.java:70)
at gseSrc.graphics.Window.queueEvent(Window.java:193)
at gseSrc.graphics.explorer.Explorer.treeWillExpand(Explorer.java:286)
at javax.swing.JTree.fireTreeWillExpand(Unknown Source)
at javax.swing.JTree.setExpandedState(Unknown Source)
at javax.swing.JTree.expandPath(Unknown Source)
at javax.swing.JTree.expandRow(Unknown Source)
at gseSrc.graphics.explorer.Explorer.(Explorer.java:234)
at gseSrc.graphics.Window.reset(Window.java:117)
at gseSrc.Main.main(Main.java:59)
Commenter la réponse de Darf33
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
0
Merci
tu es sur que tu as au moins un noeud quand tu fais la commande?
l'erreur est dans le contructeur de la classe Explorer...

at gseSrc.graphics.explorer.Explorer.(Explorer.java:234)
Commenter la réponse de cormandyr
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
0
Merci
Voici mon constructeur de la classe explorer :

public Explorer(Window window, int sizex, int sizey)
{
super();
this.window = window;
menuClick = new MenuClick(this, window);
cancel_expand = false;
copy = null;
top = new Node("Explorer");

tree = new JTree();
        tree.getInsets().set(5, 5, 5, 5);
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
    tree.setRootVisible(false);
    tree.addTreeExpansionListener(this);
        tree.addTreeWillExpandListener(this);
        tree.addTreeSelectionListener(this);
        tree.addMouseListener(this);
        tree.setEditable(true);
                
model = (DefaultTreeModel)tree.getModel();
        model.addTreeModelListener(this);

model.setRoot(top);

Node desktop = new Node(FileSystemView.getFileSystemView().getHomeDirectory(), FileSystemView.getFileSystemView().getHomeDirectory().getName());
model.insertNodeInto(desktop, top, top.getChildCount());

    model.reload();

        setPreferredSize(new Dimension(sizex, sizey));
        this.setViewportView(tree);
}


Le noeud "Bureau" existe bien et avec un loadChildren(desktop) j'ai bien ses enfants.
J'ai essayé d'appeler la méthode tree.expandRow(0) juste après model.reload(), c'est peut-être pas le bon endroit alors non ?
Commenter la réponse de Darf33
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
0
Merci
C'est bon j'ai trouvé . Un problème d'instanciation visiblement. J'essayais de traiter un évènement alors que la classe Controller n'était pas encore instanciée (enfin d'après ce que j'ai compris).

Merci beaucoup ^^
Commenter la réponse de Darf33