Problème pour garder un noeud ouvert dans JTree

Résolu
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012 - 31 juil. 2012 à 15:17
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 :

9 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
14 août 2012 à 08:38
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...
3
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
1 août 2012 à 10:07
Salut,

pour "l'ouverture" des noeuds, c'est plus avec le TreeExpansionListener que tu dois regarder
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
13 août 2012 à 09:58
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.
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
13 août 2012 à 10:19
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);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
13 août 2012 à 11:28
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.
0
Darf33 Messages postés 40 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 14 août 2012
13 août 2012 à 14:44
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)
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
13 août 2012 à 20:59
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)
0
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 à 08:15
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 ?
0
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
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 ^^
0
Rejoignez-nous