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

Signaler
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
-
Darf33
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012
-
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

Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
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...
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
Salut,

pour "l'ouverture" des noeuds, c'est plus avec le TreeExpansionListener que tu dois regarder
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012

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.
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
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);
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012

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.
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012

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)
Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
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)
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012

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 ?
Messages postés
40
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
14 août 2012

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 ^^