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

SWT/JFace Java Discussion :

Itération des noeuds finaux d'un treeviewer


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut Itération des noeuds finaux d'un treeviewer
    Bonjour

    Je voudrais créer un bouton qui me permette d'itérer à travers des noeuds finaux (n'ayant pas d'enfants donc) d'un treeviewer. Concrètement, si je n'ai pas sélectionné de noeud dans l'arbre, la sélection viendrait se placer sur le premier noeud final de l'arbre, puis sur le suivant, etc.

    Si j'ai sélectionné un noeud dans l'arbre, la sélection viendrait se placer sur le noeud final suivant.

    En fait, ce que je voudrais faire ressemble un peu à la fonction Next Change ou Next Difference dans la vue Team Synchronizing d'Eclipse.

    La difficulté, c'est que je ne sais pas trop par où commencer l'algo.

    Auriez-vous une idée?

    Merci par avance

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Tout va dépendre du modèle que tu as passé à ton TreeViewer.
    Si on prend comme exemple la classe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MyNode {
     
        /**
         * The children of sub-nodes.
         */
        private List < MyNode > children;
     
        /**
         * The parent node of this node.
         */
        private MyNode parent;
    }
    Un noeud a donc: un noeud père et une liste de noeuds enfants.
    Sans sélection, pour récupérer la première feuille, il te faut faire:
    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
    MyNode root = (MyNode) myTreeViewer.getInput();
    MyNode firstLeaf = getFirstLeaf(root);
    ...
    public MyNode getFirstLeaf(MyNode currentNode) {
        MyNode resultNode = null;
        // C'est une fonction récursive qui s'arrête quand elle a trouvé la première feuille.
        if (currentNode.isLeaf()) {
            resultNode = currentNode;
        } else {
            List < MyNode > children = currentNode.getChildren();
            if (children != null && !children.isEmpty()) {
                resultNode = getFirstLeaf(children.get(0));
            }
        }
        return resultNode;
    }
    Sinon, il te faut adapter l'algorithme pour qu'il récupère le premier noeud feuille à partir d'un noeud. Après, c'est de la théorie de graphe classique...
    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
    26
    27
    28
    29
    30
    31
    ISelection selection = myTreeViewer.getSelection();
    if (selection instanceof IStructuredSelection) {
        MyNode selectedNode = (MyNode) ((IStructuredSelection) selection).getFirstElement();
        MyNode nextLeafNode = getNextLeaf(selectedNode);
    }
    ...
    public MyNode getNextLeaf(MyNode currentNode) {
        MyNode resultNode = null;
        if (!currentNode.isRoot()) {
            MyNode parentNode = currentNode.getParentNode();
            // Il faut regarder dans les frères du noeud courant, ou dans les frères de son père.
            // On cherche d'abord chez les frères:
            List < MyNode > children = parentNode.getChildren();
            if (children != null && !children.isEmpty()) {
                MyNode node;
                MyNode currentResult = null;
                int currentIndex = children.indexOf(currentNode);
                for (int i = currentIndex + 1; i < children.size() && currentResult == null; i++) {
                    node = children.get(i);
                    currentResult = getFirstLeaf(node);
                }
                if (currentResult != null) {
                    resultNode = currentResult;
                } else {
                    // On cherche chez les frères du père.
                    resultNode = getNextLeaf(parentNode);
                 }
            }
        }
        return resultNode;
    }
    Bon, tout ça n'est pas testé bien sur, c'est un algorithme "général"...
    Je ne sais pas si ça va t'aider, mais c'est un début

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    Merci pour ton aide
    Je vais déjà essayer d'avancer avec ça.

Discussions similaires

  1. Suppression des noeuds cochés d'un treeview
    Par stefsas dans le forum C#
    Réponses: 10
    Dernier message: 30/07/2010, 10h18
  2. Filtrage des noeuds d'un menu treeview
    Par mortis dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/04/2009, 21h38
  3. Réponses: 1
    Dernier message: 17/05/2006, 16h32
  4. [c#] comment faire pour garder des noeuds ouverts treeview?
    Par irnbru dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/11/2005, 00h47
  5. Pbs pour Glisser-Deplacer des noeuds dans un TreeView.
    Par psau dans le forum C++Builder
    Réponses: 3
    Dernier message: 08/09/2004, 21h02

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