IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTree]Focus sur node et raffraichissement


Sujet :

Composants Java

  1. #1
    Invité1
    Invité(e)
    Par défaut [JTree]Focus sur node et raffraichissement
    Bonsoir,

    Je suis étudiant en DUT Informatique et dans le cadre d'un projet tuteuré j'ai à réaliser une application Java en équipe. Jusque là tout allait bien seulement là je tombe sur un os.

    J'ai des éléments de plan de bâtiment de diverses natures à représenter graphiquement (mur, fenêtre, bâtiment, étage, . . .) et une hiérarchie entre ces éléments (étage dans un bâtiment, étage dans une bâtiment, . . .). J'ai donc choisis d'utiliser un JTree pour gérer la hiérarchie.

    Tous mes constructeurs d'élément contiennent un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    elemNode = new DefaultMutableTreeNode("Element");
    monPere.getNode().add(elemNode);
    getNode() étant l'accesseur permettant de récupérer le nœud de l'élément monPere contenant le nouvel élément. Ce qui donne au final une hiérarchie du genre :

    Site
    __+Batiment1
    __________+Etage1
    __________+Etage2
    __________+Etage3
    __+Batiment2
    __________+Etage1
    __________+Etage2

    Mon soucis viens du fait que si j'instancie mes éléments sans déplier l'arbre, alors la structure est bien dessinée dans le JTree. En revanche si je déplie le JTree puis que j'instancie mes éléments, alors le JTree n'affichera que les instances crées avant son déploiement. J'ai bien essayé la méthode repaint() sur mon JTree mais rien n'y fait.

    Mon autre soucis est que je voudrais pouvoir récupérer l'instance du DefaultMutableTreeNode quand je clique sur le noeud correspondant dans le JTree. A ce problème je n'ai même pas trouvé une seule ébauche d'une solution.

    Je pense que vous pourrez m'éclairer.

    Cordialement,
    Lionel.

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Salut,

    Pour ajouter proprement des noeuds dans un arbre, il faut les ajouter via le TreeModel. En l'occurence un DefaultTreeModel qui gère les évènements d'ajouts et est capable de mettre à jour le JTree en fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    treeModel.insertNodeInto(newNode, parent, index);
    treeModel.removeNodeFromParent(node);

  3. #3
    Invité1
    Invité(e)
    Par défaut
    Merci beaucoup je vais pouvoir tester ça la semaine prochaine (j'ai d'autres objectifs de projet cette semaine).
    Mais j'avais un léger doute sur la manière de faire.

    A bientôt,
    Lionel.

  4. #4
    Invité1
    Invité(e)
    Par défaut
    Voilà grâce à la réponse donnée plus haut j'ai pu régler mon problème de rafraichissement et par là même gérer le focus sur les Node.

    Dans les classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class Element extends ArrayListDessin<ElemFils>
    {
    private DefaultMutableTreeNode elemNode;
     
    public Element(ElemPere Pere)
    {  
    elemNode = new DefaultMutableTreeNode("Nom");
    this.getModel().insertNodeInto(elemNode, ElemPere.getNode(), this.getRoot().getNode().getChildCount());
    }
     
    public DefaultTreeModel getModel()
    {
    return this.getRoot().getModel();
    }
     
    public Site getRoot()
    {
    return Pere.getRoot();
    }
     
    public DefaultMutableTreeNode getNode()
    {
    return elemNode;  
    }
    }
    Dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mytree.addTreeSelectionListener(new TreeSelectionListener()
    {	
    public void valueChanged(TreeSelectionEvent e) 
    {
    DefaultMutableTreeNode mynode = (DefaultMutableTreeNode) mytree.getLastSelectedPath
    }
    }
    Voilà et encore merci pour votre aide.
    Dernière modification par Invité1 ; 29/12/2007 à 13h07.

Discussions similaires

  1. [C#]garder le focus sur un node d'un treeview
    Par Blo0d4x3 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/05/2006, 21h23
  2. [JTree] ToolTipText sur chaque node
    Par Stessy dans le forum Composants
    Réponses: 6
    Dernier message: 19/04/2005, 16h01
  3. Focus sur DrawGrid
    Par zworg dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/05/2004, 13h44
  4. Réponses: 2
    Dernier message: 19/08/2003, 15h45
  5. Ne jamais mettre le focus sur un tbutton, possible
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/07/2003, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo