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 :

[JTree] cellRender


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 17
    Par défaut [JTree] cellRender
    Bonsoir,

    J'ai un JTree auquel j'ai définit un renderer.
    Mon renderer étend le "DefaultTreeCellRenderer".
    Mon render initialise le "ToolTipText" du JLabel mais il n'apparaît jamais quand je reste sur un noeud de l'arbre....

    Si quelqu'un sait pourquoi.

    Voici le code de mon renderer :
    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
     
    public class HooverTreeRenderer extends DefaultTreeCellRenderer {
    	public HooverTreeRenderer(){
    	  super();
    	}	
     
    	public Component getTreeCellRendererComponent(JTree tree,Object value ,boolean selected,boolean expanded
    			,boolean leaf,int row,boolean hasFocus){
     
    	  super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
     
    	  HooverFile hooverFile = (HooverFile)value;
    	  setText(hooverFile.getFileName());
    	  setToolTipText(hooverFile.getExternUrl().toString());
    	  setOpaque(true);
     
    	  if (hasFocus) {
    	    setBackground(ParameterUI.SELECTION_COLOR);
    	  } else {
    	    setBackground(Color.WHITE);
    	  }
     
    	  return this;				
    	}	
    }
    Ainsi que le bout de code où j'affecte mon renderer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          tree.setCellRenderer(new HooverTreeRenderer());
    Encore une fois, merci beaucoup pour vos réponses

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Tu ne peux pas t y prendre comme ca pour définir un ToolTipText dans un JTree. Il faut que tu surcharge la méthode getToolTipText de la classe JTree. Si tu ne veux pas réécrire un classe juste pour ca tu peux faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    JTree jt = new JTree() {
       public String getToolTipText(MouseEvent e) {
    	if (getRowForLocation(evt.getX(), evt.getY()) == -1) 
    		return null;
    	else
    		//tu renvoie ici le texte que tu veux pour le tooltip
       }
    }

  3. #3
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Si, si, il peut faire comme ça aussi, les deux façons de faire sont correctes. Par contre, il ne lui manquait que cette ligne, à placer qq part dans le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ToolTipManager.sharedInstance().registerComponent(tree);

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    ha oui exact j'avais complètement oublié cette ligne.

  5. #5
    Membre averti
    Inscrit en
    Juin 2002
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 37
    Par défaut
    Oui, il faut enregistré le composant jtree auprès du tooltipmanager. J'ai galéré avant de savoir ça...

  6. #6
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    Moi j'avais pas utilisé un truc comme ça!


    Dan la construction du JTree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      ...
     
        tree = new JTree(creerNoeuds(noeud)); // creerNoeud() est une méthoed particulière pour mon boulot
        tree.setToolTipText(""); // laisser sinon ca marche pas!
    la méthode que j'appelle pour initialiser ou modifier le tooltip
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      private void modifierToolTipNoeud(DefaultMutableTreeNode node, String texte) {
        if (node == null) return;
     
        ((myLabel) node.getUserObject()).setToolTipText(texte);
      }
    et les autres classes:


    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
     
    class myTreeCellRenderer extends DefaultTreeCellRenderer {
      public Component getTreeCellRendererComponent(
        JTree tree, Object obj, boolean selected, boolean expanded,
        boolean leaf, int row, boolean hasFocus) {
     
        DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode) obj;
        myLabel jl = (myLabel) dmtn.getUserObject();
        jl.setFont(new Font(null, 1, 11));
     
        return jl;
      }
    }
     
    class myLabel extends JLabel {
      myLabel( String txt, Color bg) {
        setText(txt);
        setForeground(bg);
      }
    }

    Et c'est moi ca marche niquel

  7. #7
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Oui, mais tu dois créer autant d'instances de MyLabel que de noeuds dans ton arbre. De plus, le user object est dans ce cas contraint à être un MyLabel , c'est moins généraliste que les deux propositions précédentes. Enfin, tu amènes des éléments de la Vue au niveau du Modèle (en plaçant un JLabel dans le user object).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 17
    Par défaut
    Merci pour ta réponse herve91, ça fonctionne nikel

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

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