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] Surligner un element


Sujet :

Composants Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Par défaut [JTree] Surligner un element
    Bonjour,

    j'aimerais faire qq chose qui parait simple, mais je n'y arrive pas : changer la couleur (du fond ou de la police) d'un element de mon JTree.

    Est-ce possible ?

  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
    Tout est possible

    Passe par un TreeCellRenderer. Y a déjà eu beaucoup de post à ce sujet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class MyTreeCellRenderer extends DefaultTreeCellRenderer {
     
      public Component getTreeCellRendererComponent(JTree tree, Object value,
      boolean sel,boolean expanded, boolean leaf, int row, boolean hasFocus) {
     
        /* Apres tu fais qqchose du genre */
        if(value.equals(ce que tu veux)) {
            setBackground(Color.YELLOW);
        }
        return this;
      }
    }
    une fois que tu as déclaré cette class, tu peux l'appliquer a ton JTree comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JTree monJTree = new JTree();
    monJTree.setCellRenderer(new MyTreeRenderer());
    et voila le tour est joué

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Par défaut
    Le problème c'est que la modif du background s'effectue sur tt l'arbre et je veux le faire que sur un noeud ...

  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
    Quel est la particularité de ce noeud dans l'arbre?

    Parce que ce que je t ai donné peut te permettre de ne surligner qu un seul noeud. Ou de colorier les noeud en fonction de leur propriété.

    Je pourrais mieu t aider si tu me dit qq est le type de donnée que tu as dans ton arbre. Et quelle est la particularité du noeud à surligner par rapport au autres.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Par défaut
    LEs noeuds ne contiennent que du texte et le nd que dont je veux changer la couleur, est le nd sur lequel j'ai cliqué

  6. #6
    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
    Dans ce cas tu auras le code suivant pour la classe du TreeCellRenderer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MyTreeCellRenderer extends DefaultTreeCellRenderer {
     
      public Component getTreeCellRendererComponent(JTree tree, Object value,
      boolean sel,boolean expanded, boolean leaf, int row, boolean hasFocus) {
     
        if(sel) {
            setBackground(Color.YELLOW); //Ou la couleur que tu veux
        }
        return this;
      }
    }
    et lors de la déclaration de ton arbre tu ajoute ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JTree tonArbre = new JTree();
    tonArbre.setCellRenderer(new MyTreeCellRenderer());
    Fais moi confiance ca marche.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Par défaut
    Bon, j'ai fait exactement comme tu me l'as dit mais maintenant le texte de mon arbre n'est plus visible

  8. #8
    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
    Logiquement ca devrait marché
    essai en détailant un peu plus comme ca :

    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 value,
      boolean sel,boolean expanded, boolean leaf, int row, boolean hasFocus) {
     
        setText((String)value);
        setForeground(Color.BLACK);
        setFont(new Font("Courrier",Font.BOLD,FONT_SIZE));
        if(sel) {
            setForeground(Color.YELLOW); //Ou la couleur que tu veux
        }
        return this;
      }
    }
    On va finir par y arrivé.
    Apres c a toi de personnaliser comme tu le sens

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Par défaut
    Ok, le texte apparait maintenant comme avant, mais la couleur ne change jamais

  10. #10
    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
    Effectivement le setBackground ne marchait pas.
    Je t fais un petit exemple qui marche parfaitement.
    Apres a toi de l adapter



    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    import javax.swing.*;
    import javax.swing.tree.*;
     
    import java.awt.*;
     
     
    public class Test1 extends JFrame{
     
    	public Test1() {
            super("test");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
     
        public static void main(String arg[]) {
            Test1 frame = new Test1();
            frame.setSize(500,500);
     
            DefaultMutableTreeNode racine = new DefaultMutableTreeNode("Copains");
            DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("Toto");
            DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Tata");
            DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("Tutu");
     
            racine.add(node1);
            racine.add(node2);
            racine.add(node3);
     
            JTree jt = new JTree();
            jt.setCellRenderer(new MyTreeCellRenderer());
    		DefaultTreeModel dtm = new DefaultTreeModel(racine);
    		jt.setModel(dtm);
     
            JScrollPane jsp = new JScrollPane(jt);
     
            frame.getContentPane().setLayout(new BorderLayout());
            frame.getContentPane().add(jsp,BorderLayout.CENTER);
            frame.setVisible(true);
        } 
    }
     
     
    class MyTreeCellRenderer extends JTextArea implements TreeCellRenderer {
     
    	  public Component getTreeCellRendererComponent(JTree tree, Object value,
    	  boolean sel,boolean expanded, boolean leaf, int row, boolean hasFocus) {
    	  	DefaultMutableTreeNode dmt = (DefaultMutableTreeNode)value;
    	  	Object o = dmt.getUserObject();
    	  	setText((String)o);
    	    setBackground(Color.WHITE);
    	    setFont(new Font("Courrier",Font.BOLD,12));
    	    if (sel) {
    	    	System.out.println((String)o);
    	        setBackground(Color.YELLOW); //Ou la couleur que tu veux
    	    }
    	    return this;
    	  }
    }

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 47
    Par défaut
    Je suis blazé !

    Ton code marche très bien effectivement, mais le mien non !

    En fait, il affiche bien le nom de l'elt selectionné mais il ne change pas la couleur !

    JE comprends pas, j'ai fait comme toi pourtant ...

    [EDIT] J'AI RIEN DIT ! J'avais pas vu :

    class MyTreeCellRenderer extends JTextArea implements TreeCellRenderer

    Desolé, ca marche nickel maintenant, MERCI A TOI

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

Discussions similaires

  1. Comment tjr afficher le premier element d'un JTree
    Par anasnas dans le forum Composants
    Réponses: 0
    Dernier message: 29/06/2011, 16h47
  2. recuperer l'element de base d'un jtree
    Par christianf dans le forum Composants
    Réponses: 3
    Dernier message: 31/08/2007, 14h59
  3. Réponses: 5
    Dernier message: 23/06/2006, 09h50
  4. Surligner une branche dans un JTree
    Par djangers dans le forum Composants
    Réponses: 3
    Dernier message: 22/06/2004, 14h46
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

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