cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009
-
18 déc. 2008 à 17:42
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 2012
-
13 janv. 2009 à 22:51
Bonjour, j'aurais une question concernant les jtree :
est-ce que l'on peut stocker des objets dans les defaultmutabletreenode comme ca :
DefaultMutableTreeNode racine = new DefaultMutableTreeNode(new Joueur("les boss"));
DefaultMutableTreeNode node = new DefaultMutableTreeNode(new Joueur("zizou"));
racine.add(node);
JTree essai = new JTree(rootnode);
sachant que Joueur est une classe qui se presente ainsi
public class Joueur {
public String name;
public String ID;
public Joueur (String nom) {
this.name=nom;
}
}
je veux en gros mettre dans mon jtree des instances de Joueur pour des raisons pratiques disons puisque je peux génerer un ID à chaque joueur et le récupérer quand je veux ....
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 13 janv. 2009 à 15:42
Si maintenant, avec l'exemple que j'ai montré, tu sélectionne un noeud et tu exécute ceci:
Joueur arthur = null;
DefaultMutableTreeNode dmtn = null;
dmtn = (DefaultMutableTreeNode) monArbre.getLastSelectedPathComponent();
Object o = dmtn.getUserObject();
if (o instanceof Joueur) {
arthur = (Joueur) dmtn.getUserObject();
String ID_needed = arthur.ID;
System.out.println("ID_needed: " + ID_needed);
}else{
JOptionPane.showMessageDialog(this, "Le noeud sélectionné n'est pas un Joueur");
}
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 19 déc. 2008 à 09:38
ok ! mais faut-il néanmois changer quelquechose dans le treecellrender ou le treecelleditor pour qu'il puisse afficher les noeuds, c'est a dire comment le composant jtree va-t-il comprendre qu'il faut afficher dans l'arbre Joueur.name ?
merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 8 janv. 2009 à 17:59
bonjour,
je relance un peu le topic.
en partant toujours sur le meme exemple, j'ai en fait dans mon arbre des instances de Joueur. Cepedant quand je fait la manipulation suivante pour pourvoir extraire l'ID du Joueur et j'ai une erreur :
Joueur arthur = null;
arthur= (Joueur)MonArbre.getLastSeletedPathComponent();
System.out.println(arthur.ID);
l'erreur me dit qu'il est incapable d'effectuer le cast que je fais ... plus exactement il me dit qu'il est incapable de convertir un DefaultMutableTreeNode en Joueur ....
y a-t-il une erreur effectivement dans ce que je fais ?
comment puis-je alors récupérer mon objet depuis l'arbre ?
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 9 janv. 2009 à 00:59
merci uhrand pour la réponse !!
une petite question qui peut paraitre bete mais si je comprends bien :
la methode getlastselectedpathcomponent permet de récuperer un element de l'arbre sauf que le compilateur ne sait pas de quel objet il s'agit précisément...on ne peut donc pas agir dessus comme on le voulait à la base. on le cast donc en defaulmutabletreenode et on recupere l'objet joueur a partir du defaultmutabletreenode pour pouvoir le manipuler ...
pourquoi faut-il obligatoirement caster le retour de getlastselectedcomponent en defaultmutabletreenode s'il faut recaster apres le retour de la methode getuserobject qui a un principe de fonctionnement analogue à celui de getlastselectedcomponent ? pourquoi ça ne passe pas en castant directement le retour de getlastselectedcomponent en Joueur comme je l'avais fais (à tort certes) ainsi :
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 9 janv. 2009 à 01:01
merci uhrand pour la réponse !!
une petite question qui peut paraitre bete mais si je comprends bien :
la methode getlastselectedpathcomponent permet de récuperer un element de l'arbre sauf que le compilateur ne sait pas de quel objet il s'agit précisément...on ne peut donc pas agir dessus comme on le voulait à la base. on le cast donc en defaulmutabletreenode et on recupere l'objet joueur a partir du defaultmutabletreenode pour pouvoir le manipuler ...
pourquoi faut-il obligatoirement caster le retour de getlastselectedcomponent en defaultmutabletreenode s'il faut recaster apres le retour de la methode getuserobject qui a un principe de fonctionnement analogue à celui de getlastselectedcomponent ?
pourquoi ça ne passe pas en castant directement le retour de getlastselectedcomponent en Joueur comme je l'avais fais (à tort certes) ainsi :
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 9 janv. 2009 à 20:06
merci uhrand pour la réponse !!
une petite question qui peut paraitre bete mais si je comprends bien :
la methode getlastselectedpathcomponent permet de récuperer un element de l'arbre sauf que le compilateur ne sait pas de quel objet il s'agit précisément...on ne peut donc pas agir dessus comme on le voulait à la base. on le cast donc en defaulmutabletreenode et on recupere l'objet joueur a partir du defaultmutabletreenode pour pouvoir le manipuler ...
pourquoi faut-il obligatoirement caster le retour de getlastselectedcomponent en defaultmutabletreenode s'il faut recaster apres le retour de la methode getuserobject qui a un principe de fonctionnement analogue à celui de getlastselectedcomponent ?
pourquoi ça ne passe pas en castant directement le retour de getlastselectedcomponent en Joueur comme je l'avais fais (à tort certes) ainsi :
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 12 janv. 2009 à 11:42
bonjour, j'ai essayé le code proposé à savoir :
1.
Joueur arthur = null;
2.
DefaultMutableTreeNode dmtn = null;
3.
dmtn = (DefaultMutableTreeNode)MonArbre.getLastSelectedPathCompenent();
4.
arthur = (Joueur)dmtn.getUserObject();
5.
String ID_needed = arthur.ID;
mais ca me retourne l'exception suivante :
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to Threat
Pourquoi me retourne-t-il une telle exception ? enfin pourquoi s'agit-il d'une exception sur String puisque la methode getuserobject me permet de recuperer un objet de type Joueur ...
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 12 janv. 2009 à 16:38
Je ne vois pas de rapport avec le code indiqué, car il ne contient aucune référence à la classe "Threat". Est-tu certain de la ligne qui cause l'exception?
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 12 janv. 2009 à 16:47
oui excuse moi ... en fait Threat c'est une classe que j'ai, et comme c'est un projet plus ou moins confidentiel, j'utilise des exemples style Joueur ... dans ce forum j'utilise Joueur comme classe analogue à Threat ... donc typiquement l'erreur retournée serait :
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to Joueur
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 13 janv. 2009 à 09:51
oui c'est la seule explication possible ... je dois donc faire l'erreur au niveau de la creation de mes TreeNode. En fait, j'ai une interface graphique qui me permet de créer des noeuds d'un arbre ... Quand je clique par exemple sur le bouton "Ajouter Element" l'action executée est :
Joueur nouveau = new Joueur();
DefaultMutableTreeNode newnode = new DefaultMutableTreeNode(nouveau);
DefaultMutableTreeNode selectednode = null;
selectednode = MonArbre.getLastSelectedComponentPath();
selectednode.add(newnode);
donc logiquement cette action me permet en fait de créer des noeuds de type Joueur ... Y a-t-il une erreur ici ? -elle ne pourrait venir que de là d'après l'exception générée mais je ne la situe pas ...-
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 13 janv. 2009 à 12:14
oh lala je ne sais pas quoi faire ca me retourne toujours la meme erreur ... je fais super gaffe pourtant je ne vois pas ou ca bloque vraiment pas ... :s
cs_coltman
Messages postés97Date d'inscriptionjeudi 3 janvier 2008StatutMembreDernière intervention10 février 2009 13 janv. 2009 à 17:08
oh yeah ! thanks ca a l'air de marcher là ... mais dites moi quelle est la logique derriere tout ca ... cette derniere manip revient au meme a celles d'avant ... pourquoi ca ne marchais quand meme pas ?