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 :

Caster un JTree en MutableTreeNode


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Par défaut Caster un JTree en MutableTreeNode
    Bonjour!
    J'ai un soucis pour caster un JTree en... autre chose!
    j'ai ma classe MyNode qui implémente MutableTreeNode, Cloneable et Serializable.
    Les deux cast suivant sont acceptés par le compilateur :
    JTree tree = new JTree();
    MutableTreeNode mtn = (MutableTreeNode)tree.getModel().getRoot();
    MyNode mn = (MyNode)tree.getModel().getRoot();

    Mais la seconde ligne fait planter mon programme! (le reste du code qui dépend de CE cast est commenté et n'influe donc en rien sur le prog.

    Pour vous donner plus d'info sur ma classe MyNode :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public abstract class MyNode implements MutableTreeNode, Cloneable, Serializable
    {
    	/**
             * Le parent du noeud courant
             * (peut être null si on est à la racine du graphe)
             */
    	protected MutableTreeNode parent;
     
    	/**
             * Le nom du noeud
             */
    	protected String name;
     
    	/**
             * Constructeur par défaut protégé d'un noeud (utilisé uniquement dans les
             * classes filles).
             */
            protected MyNode()
            {
                this(null);
            }
     
    	/**
             * Constructeur protégé d'un noeud avec un parent (utilisé uniquement dans
             * les classes filles).
             * @param parent le parent de ce noeud.
             */
    	protected MyNode(MutableTreeNode parent)
    	{
    		this.parent = parent;
    		if (this.parent != null)
    		{
    			this.parent.insert(this, this.parent.getChildCount());
    		}
    		else
    		{
    			System.err.println(this + "::MyNode(null)");
    		}
    	}
    // ... d'autres méthodes...
    }

  2. #2
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    Mais la seconde ligne fait planter mon programme!
    Si c'est une ClassCastException, commence par regarder le type de l'objet retourné, avec un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( tree.getModel().getRoot().getClass() );

  3. #3
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Par défaut
    Hum c'est un DefaultMutableTreeNode
    Ce qui ne me surprend pas en fait.
    Je suis en train d'essayer une autre méthode pour faire ce que je souhaite, du coup je suis en train de me faire mon JTree personnalisé et ne plus passer d'un JTree facilement affichable(dragNdrop...) à un MyTree (composé de MyNode) customisé je vais directement customiser le JTree... On vera...

    En fait ce qu'il me faudrait c'est un JTree dans lequel les Node et les Leaf puissent contenir des infos/objets et que je puisse continuer à l'afficher/intéragir comme avec un JTree.

  4. #4
    Membre chevronné Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Par défaut
    En fait ce qu'il me faudrait c'est un JTree dans lequel les Node et les Leaf puissent contenir des infos/objets et que je puisse continuer à l'afficher/intéragir comme avec un JTree.
    Ça tombe bien le JTree et fait pour être utilisé dans ce sens.
    En fait les TreeNode, MutableTreeNode, ..., pour lui n'existent pas, il ne voit que des objets, c'est le modèle qui lui permet de voir les éléments de façon cohérente. Donc pour se faire un truc perso, c'est généralement du côté du modèle qu'il faut regarder.

  5. #5
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Juillet 2009
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 45
    Par défaut
    C'est bien ce qui me semblait...
    Là j'ai une classe MyTree qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class MyTree
    {
    	protected MutableTreeNode root;
     
            /**
             * MutableTreeNode permettant de représenter le graphe de scène
             * @see MyNode pour le contenu des noeuds
             */
    	public MyTree()
    	{
    		root = new MyBranchNode();
            }
            // ... d'autres méthodes...
    }
    Et MyBranchNode (et MyLeafNode) héritent de MyNode qui implémente MutableTreeNode. Jusque là je pensais être sur la bonne voie car mes MyLeafNode et mes MyBranchNode contiennent mes objets!

    Je crée ensuite mon JTree à partir de mon MyTree :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MyTree myTree = new MyTree(); // que je construit avec plein de truc dedans...
    JTree tree = new AutoScrollingJTree(myTree.getRoot());
    Jusque là pas de problème MAIS!
    Quand je veux récupérer mes objets stokés dans les feuilles (MyLeafNode) je fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void browseNode(Object o){
        MyTree root = (MyTree)o; // C'est ce cast là qui ne passe pas!
        for (int i=0; i<root.getChildCount(); i++){
                    if (root.getChildAt(i).isLeaf()){
                        MyLeafNode ln = (MyLeafNode)root.getChildAt(i);
                        Form f = ln.getF();
                        draw(f);
                    }
                    else {
                        browseNode((MyNode)root.getChildAt(i), g);
                    }
    }
    Cette fonction est appellée ainsi : (et c'est là le pb...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    browseNode(jtree.getModel().getRoot());
    En bref mon problème c'est que dans mes feuilles il ne semble ne rien n'y avoir! Ca semble plutot être des MutableTreeNode et pas des MyBranchNode/MyLeafNode car j'ai pas accès aux méthodes de ces classes (les classes sont publiques et les méthodes aussi pour info)

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Juste comme ça, tu la construits bien avec des MyNode/MyBranchNode/MyLeafNode ton arboresence initiale. J'en ai pas franchement l'impression...

    Que fais tu dans la création de l'instance de MyTree?

Discussions similaires

  1. [JTree] rafraichissement
    Par nurn dans le forum Composants
    Réponses: 12
    Dernier message: 29/07/2005, 14h41
  2. [JTree]noeud parent dans un jtree
    Par wassimb dans le forum Composants
    Réponses: 5
    Dernier message: 22/03/2004, 14h06
  3. [JTree]problème de rafraichissement
    Par peppena dans le forum Composants
    Réponses: 9
    Dernier message: 20/01/2004, 14h06
  4. [JTree]redimensionnement d'un noeud
    Par grishka dans le forum Composants
    Réponses: 4
    Dernier message: 10/04/2003, 14h33
  5. [JTree] Ouvrir/Fermer l'ensemble des noeuds
    Par Math_Caen dans le forum Composants
    Réponses: 3
    Dernier message: 07/04/2003, 14h01

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