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] Noeuds personnalisés


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut [JTree] Noeuds personnalisés
    je suis entrain de faire un JTree
    mais je voudrais pouvoir mettre comme noeuds d'autres object que des String

    pour l'instant je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(new String("coucou"));
    mais j'aimerais bien pouvoir faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(JTextField("coucou"));
    toutes les idées sont les bienvenues...

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Je suppose que ton probleme est d'afficher "coucou" au lieu d'un truc comme "javax.swing.JTextField[,0,0,0x0,invalid,layout=javax.swing......".
    Le texte affiché par le JTree pour chaque node est la chaine renvoyée par la méthode toString() de l'objet passé au constructeur de la node.
    Je ne maitrise pas trop le JTree et je n'en connais pas toutes possibilité (il y a peut-être une meilleure solution) mais tu peut créer une classe qui dérive de JTexField et réécire la méthode toString() afin quelle renvoie le texte voulu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class JTextFieldForJTree extends JTexField
    {
         public String toString()
         {
              return getText();
         }
    }
    ensuite tu n'as plus qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(JTextFieldForJTree("coucou"));
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    tu as tout a fait raison

    mais ce que je voudrais arriver à faire, est de carrément mettre un Objet autre qu'un String :
    - mettre tout un bloc de texte de plusieurs lignes comme noeud de l'arbre
    - ou bien, mettre une image à certains noeuds de l'arbre
    - ou ... n'importe quel autre object graphique

    merci en tout cas

  4. #4
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    il faut redéfinir getTreeCellRendererComponent du DefaultTreeCellRenderer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class MyTreeCellRenderer extends DefaultTreeCellRenderer{
            public Component getTreeCellRendererComponent(JTree tree, Object obj,
                boolean selected, boolean expanded, boolean leaf,
                    int row, boolean hasFocus){
     
                    DefaultMutableTreeNode dmtcr = (DefaultMutableTreeNode)obj;
     
            	if (dmtcr.getUserObject() instanceof JPanel ){
            		return  (JPanel) dmtcr.getUserObject();
            	}else {
            		return (JLabel) dmtcr.getUserObject();
            	}
           }         
    }
    Y a pt une solution plus "propre"

  5. #5
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Pour ce qui est de personnaliser les icones de l'arbre, voici un bout de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //---------- gestion du style ---------------
    DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
    ImageIcon iconC = new ImageIcon("GUI/img/componentNode.gif");
    ImageIcon iconOC = new ImageIcon("GUI/img/componentNodeOpen.gif");
    ImageIcon iconI = new ImageIcon("GUI/img/interfaceNode.gif");
     
    renderer.setOpenIcon(iconOC);
    renderer.setClosedIcon(iconC);
    renderer.setLeafIcon(iconI);
    arbre.setCellRenderer(renderer); // arbre = ton JTree
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    merci, la redéfinition de la méthode dans DefaultTreeCellRenderer marche vraiment super bien

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

Discussions similaires

  1. [JTree] Icones personnalisés
    Par pikmin dans le forum Composants
    Réponses: 2
    Dernier message: 13/05/2010, 14h11
  2. JTree noeud sélectionné
    Par KeKeMaN dans le forum Composants
    Réponses: 9
    Dernier message: 25/03/2007, 17h14
  3. Jtree - noeud ouvert?
    Par Lebas dans le forum Composants
    Réponses: 3
    Dernier message: 30/11/2006, 17h33
  4. JTree : noeuds "Bureau" et "Mes Documents"
    Par Bartuk dans le forum Composants
    Réponses: 4
    Dernier message: 03/05/2006, 11h12
  5. [JTree]noeud parent dans un jtree
    Par wassimb dans le forum Composants
    Réponses: 5
    Dernier message: 22/03/2004, 14h06

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