[JTree] mettre un tooltip sur un noeud ? (sur DefaultMutableTreeNode ?)

Résolu
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 24 mai 2006 à 14:53
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 - 8 juin 2006 à 10:47
Bonjour tout le monde !

J'ai quelques petits soucis avec les JTree, c'est la premiere que je m'en sers. J'ai creer un arbre JTree avec une serie de noeud et sous-noeud de type DefaultMutableTreeNode. Je souhaiterez mettre un tooltip sur chaque noeud mais aucune methode n'existe avec la classe DefaultMutableTreeNode. Comment faire ? Y a t-il une alternative au lieu d'utiliser DefaultMutableTreeNode ?

Merci all !
a+
Cbil

8 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
25 mai 2006 à 07:15
//Where the tree is initialized:
        //Enable tooltips:
        ToolTipManager.sharedInstance().registerComponent(tree);
        tree.setCellRenderer(new MyRenderer());


...
    class MyRenderer extends DefaultTreeCellRenderer {
        public Component getTreeCellRendererComponent(
                JTree tree,
                Object value,
                boolean sel,
                boolean expanded,
                boolean leaf,
                int row,
                boolean hasFocus) {
            super.getTreeCellRendererComponent(
                    tree, value, sel,
                    expanded, leaf, row,
                    hasFocus);
            if (leaf) {
                setToolTipText("This is a leaf.");
            } else {
                setToolTipText(null); //no tool tip
            }
            return this;
        }
    }
3
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
8 juin 2006 à 06:36
Bonjour cbil.


Je suis désolé de la confusion que j'ai causé. En fait, la réponse concernant le addNode est destiné à makni qui évoquait ce problème dans sa réponse à lui (voir plus haut).
Ce que tu dois faire c'est indiqué dans la réponse concernant le ToolTipManager:
1. enregistrer le JTree auprès du ToolTipManager.
2. enregistrer MyRenderer auprès du JTree
3. adapter la logique de MyRenderer à tes besoins (ici tu as peut-être des problèmes?)
3
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
8 juin 2006 à 10:47
Cool merci, c'est bien Value mon objet NoeudArbreXML :

Mes test provoquer une erreur car l'objet n'etait sans doute pas toujours un NoeudArbreXML.

Pour verifier si value etait bien mon objet NoeudArbreXML, j'ai fais ca : 

setToolTipText(value.getClass().getName());

Sinon pour getTreeCellRendererComponent, si on ajoute un parametre comme mon string tooltip, ca marche plus apres.
Enfin voila, ca marche nickel maintenant merci beaucoup uhrand

Voici mon renderer final :

private class MyRenderer extends DefaultTreeCellRenderer {
        public Component getTreeCellRendererComponent(
                JTree tree,
                Object value,
                boolean sel,
                boolean expanded,
                boolean leaf,
                int row,
                boolean hasFocus) {
            super.getTreeCellRendererComponent(
                    tree, value, sel,
                    expanded, leaf, row,
                    hasFocus);
           if(value.getClass().equals(NoeudArbreXML.class)) //Pour verifier si c'est bien la classe concernée
                    setToolTipText(((NoeudArbreXML) value).getToolTipNoeud());
            return this;
        }
    }

a+
Cbil
3
cs_makni Messages postés 15 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 31 mai 2006
24 mai 2006 à 23:47
Salut regarde est ce k'il ya setTooltipText sur defaultMutableTreeNode, je v t'envoyer une adresse d'un site que tu trouvera solution a ton probleme que je n'ai pas en ce moment , mais je vous prie de m'aider , g une Jtree qui affiche les fichiers d'un dossier et je ve qd j'ajoute un autre fichier le Jtree affiche le noeud du nouveau fichier , g  essayé et j'ai pas trouvé sachant que je travaille avec defaultMutableTreeNode.
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
25 mai 2006 à 06:55
 




Cette méthode ajoute un nouveau Node
en dessous du Node sélectionné:


    private void addNode(){
        TreePath selectedPath = tree.getSelectionPath();
        if(selectedPath != null){
            Object o = selectedPath.getLastPathComponent();
            if(o != null){
                DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) o;
                DefaultMutableTreeNode newChild = new DefaultMutableTreeNode("new node ");
                ((DefaultTreeModel)tree.getModel())
                .insertNodeInto(newChild, selectedNode, selectedNode.getChildCount());
                TreePath newPath = selectedPath.pathByAddingChild(newChild);
                tree.setSelectionPath(newPath);
                tree.startEditingAtPath(newPath);
            }
        }
    }
0
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
25 mai 2006 à 08:47
Merci beaucoup !

J'essayerais tout ca lundi

(makni : il n'y a pas de setTooltipText sur defaultMutableTreeNode, c'est pour ca que je galerais  )

a+
Cbil
0
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
7 juin 2006 à 16:59
Bonjour Uhrand, j'avais essayé mais pas reussi et laisser tomber pour le moment. Mais à présent, j'en ai besoin (des tooltip) pour un autre arbre de mon programme.

Je ne comprend pas comment utiliser le code que chaque noeud ou feuille est son propre tooltip vu que c un JTree qui est utilisé. Je ne comprend pas non plus le rapport entre Tooltip et addNode ? (addNode n'est pas utilisé)

Merci beaucoup, a+
Cbil
0
cs_cbil Messages postés 140 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 15 mai 2008 1
8 juin 2006 à 10:36
Bonjour,
C'est moi qui suis désolé, j'ai mal relu l'ensemble.

J'ai un peu pres compris l'ensemble du code, le tooltip fonctionne. Mais je n'arrive pas à personnaliser le tooltip en fonction du noeud.

D'apres ce que j'ai compris, le MyRenderer (ou plutot la methode get...)est appelé à chaque ajout d'un noeud. - Est-il possible et comment d'acceder au noeud ou l'objet de ce noeud pour connaitre le tooltip ?
- Ou alors, en mettant un nouveau parametre String tooltip puis setTooltip dans la methode, est-il possible de preciser la valeur du parametre et à quel moment ?
- Qu'est ce que le parametre Object value, le noeud en cours ? j'ai essayé avec une concatenation de DefaultMutableTreeNode ou NoeudArbreXML mais ca ne marche pas, erreur d'execution.

(car je ne vois pas ou sont entré ces parametres, tout se fait automatiquement à l'appel de la methode on dirait,).

Dans mon programme, un noeud est sous la forme d'un objet d'une classe avec extends extends DefaultMutableTreeNode :

public class NoeudArbreXML extends DefaultMutableTreeNode
{


 private Element noeud = null;
 private String[][] attributs = null;
 private String toolTip;
  
 public NoeudArbreXML(Element telNoeud, String telNom, String telToolTip)
 {
  super(telNom);
  noeud = telNoeud;
  toolTip = telToolTip;
  initialisation();
 }
 
//cette methode pour recuperer le tooltip pour MyRenderer
 public String getToolTipNoeud()
 {
  return toolTip;
 }
 
 
 public void initialisation()
 {
  List lesNoeuds = noeud.getAttributes();
  
  attributs = new String[lesNoeuds.size()][2];
  
  for(int i=0;i<lesNoeuds.size();i++)
  {
   attributs[i][0]=((Attribute) (lesNoeuds.get(i))).getName();
   attributs[i][1]=((Attribute) (lesNoeuds.get(i))).getValue();
  }
 }
 
 public int getNombreAttributs()
 {
  return noeud.getAttributes().size();
 }

 
}

Enfin mon MyRenderer :

private class MyRenderer extends DefaultTreeCellRenderer {
        public Component getTreeCellRendererComponent(
                JTree tree,
                Object value,
                boolean sel,
                boolean expanded,
                boolean leaf,
                int row,
                boolean hasFocus, String tooltip) {
            super.getTreeCellRendererComponent(
                    tree, value, sel,
                    expanded, leaf, row,
                    hasFocus);
          
            setToolTipText(tooltip);
(ou setToolTipText( l'objet de la classe NoeudArbreXML avec acces à la methode getToolTipNoeud() ) )
            return this;
        }
    }

Pour la creation de mon arbre, j'ai une methode creationArbre() qui créé le JTree (c'est ici que j'ai mis les fonction du renderer et tooltipmanager), une fois l'instance du JTree créé, une seconde methode unArbre est appelé pour qui créé chaque noeud NoeudArbreXML selon l'arborescence voulu, elle renvoie le noeud principal. 

public JTree creationArbre(String affichage)
 {
   
  JTree monArbre = new JTree();
  ToolTipManager.sharedInstance().registerComponent(monArbre);
  MyRenderer rendu = new MyRenderer(); //c'etait au cas ou j'ai besoin de l'instance rendu apres sinon un new .... suffisait en parametre
  monArbre.setCellRenderer(rendu);
  NoeudArbreXML tn = unArbre(traitement.getRacine(), affichage); //tn le NoeudArbreXML racine
  monArbre.setModel (new DefaultTreeModel(tn));
  monArbre.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
  monArbre.addTreeSelectionListener(this);
  
  return monArbre;
 }

   Merci beaucoup !
J'espere que ce que j'ai ecrit n'est pas trop galere à comprendre ^^

Cbil
0
Rejoignez-nous