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

AWT/Swing Java Discussion :

Redéfinir l'objet du noeud


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Par défaut Redéfinir l'objet du noeud
    Bonjour, dans mon JTree j'aimerai pouvoir changé l'objet qui est aproprié au noeud. Pour celà j'ai essayé d'utiliser la méthode setUserObject() mais lorsque je veux redéfinir mon objet sa me donne une erreur de cast que je ne comprend pas étant donné que j'annule le UserObject avant d'y mettre le nouveau.

    voilà le bout de code (dans cet exemple j'aimerai remplacer mon tmpNode.getUserObject qui est une sphère par un cube):
    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
    // Crée un noeud temporaire qui correspond à la dernière selection
            DefaultMutableTreeNode tmpNode = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
     
            // Crée un nouvel item temporaire        
            Item actItem = (Item)tmpNode.getUserObject();
     
            // Redéfini l'item si celui-ci est différent du précédent
            if(actItem.getType().equals(ObjectComboBox.getSelectedItem().toString())){             
            }
            else if(ObjectComboBox.getSelectedItem().toString().equals("Cube")){
                System.out.println("avant: " + tmpNode.getUserObject()); // résultat = "Sphere"
                tmpNode.setUserObject(null);
                System.out.println("au milieu: " + tmpNode.getUserObject()); // résultat = "null"
                tmpNode.setUserObject(new Cube());
                System.out.println("après: " + tmpNode.getUserObject()); // résultat = "null"
            }
    j'ai également essayé de créer mon cube avant de le set (donc Cube myCube = new Cube() et j'appelais myCube dans le setUserObject() ) mais l'erreur restait la même.

  2. #2
    Membre émérite

    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 510
    Par défaut
    bonjour, serait -il possible d'avoir le libellé exact de l'erreur ?

    ainsi que la ligne sur laquelle l'erreur est signalé ? merci

  3. #3
    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
    T'aurais pas une méthode toString() dans ta classe Cube ? qui ferait que ça imprime "null" alors qu'il y a un objet ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Par défaut
    --> nayah
    voilà l'erreur qu'il me sort au moment ou la ComboBox est modifié (donc quand je veux changer l'objet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: _3DSceneMaker.Cube cannot be cast to _3DSceneMaker.Rotation
    en y regardant de plus près, la ligne de l'erreur ne correspond pas exactement à la ligne du changement de classe donc l'erreur vient peut-être de quelque part d'autre, je vais y méditer.


    --> natha
    j'ai effectivement un toString dans ma classe Cube mais elle retourne une String du type de l'item (donc Cube dans ce cas là). Mais peut-être que l'erreur survient avant que cette variable soit initialisée, je vais regarder de ce côté là également

    merci

  5. #5
    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
    Tu essaie de mettre un Cube dans un Node qui n'accepterait que des Rotation ?
    Tu as fait une sous-classe de DefaultMutableTreeNode pour les noeuds de ton arbre ?
    Tu as un renderer qui ferait un cast unsafe ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 32
    Par défaut
    le problème était effectivement de ce côté là merci beaucoup

    comme j'utilisais dans la suite directe du code l'objet temporaire créé au dessus du changement de classe, il était toujours en possession du userObject de l'ancienne classe.

    voilà comment j'ai fait au final:
    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
    // Crée un noeud temporaire qui correspond à la dernière selection
            DefaultMutableTreeNode tmpNode = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
     
            // Crée un nouvel item temporaire        
            Item tempItem = (Item)tmpNode.getUserObject();
     
            // Redéfini le nom de l'item       
            tempItem.setNom(NomTextField.getText());
     
            // Redéfini le type de l'item si il change
            if(tempItem.getType().equals(ObjectComboBox.getSelectedItem().toString())){             
            }
            else if(ObjectComboBox.getSelectedItem().toString().equals("Cube")){            
                tmpNode.setUserObject(null);            
                tmpNode.setUserObject(new Cube());                       
            }
     
            // Crée un nouvel item temporaire        
            Item actItem = (Item)tmpNode.getUserObject();
            actItem.setType(ObjectComboBox.getSelectedItem().toString());
     
            if(actItem.getType().equals("Cube")){
                Cube tmpItem = (Cube)tmpNode.getUserObject();
                tmpItem.setEchelle(Integer.parseInt(ValeurTextField1.getText()));
            }
            if(actItem.getType().equals("Sphere")){
                Sphere tmpItem = (Sphere)tmpNode.getUserObject();
                tmpItem.setRayon(Integer.parseInt(ValeurTextField1.getText()));
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/04/2009, 08h41
  2. Réponses: 3
    Dernier message: 11/12/2007, 11h10
  3. Transférer un noeud d'un objet DomDocument vers un autre
    Par Delphi-ne dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/05/2007, 17h22
  4. Objets partagés par les noeuds d'un cluster JBoss
    Par jbossdev dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 08/09/2006, 13h48
  5. Réponses: 3
    Dernier message: 05/05/2004, 00h39

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