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

AWT/Swing Java Discussion :

[SWING]extending DefaultTreeCellRenderer()


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Par défaut [SWING]extending DefaultTreeCellRenderer()
    Bonjour, j'ai créé un JTree, dans lequel il y a 3 types de noeuds. Un noeud représentant des projets, un noeud représentant des dossiers é un noeud représentant des fichiers, je voudrais pour chaque type de noeud avoir une icone particuliere :
    Voici ma classe qui ne fonctionne pas comme je le voudrais, j'ai pour mon noeud racine qui devrait etre un projet, une icone de dossier, et pour un dossier lorsqu'il est fermé j'ai une icone de projet é lorsque que j'étend le dossier, l'icone de dossier se met bien en place.
    Voici mon code :
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    public class MyTreeCellRenderer extends DefaultTreeCellRenderer {
     
    	private Icon openIcon = null;
    	private Icon closeIcon = null;
    	private Icon leafIcon = null;
    	private Icon projectOpenIcon = new ImageIcon("icons/book_open.png");
    	private Icon projectCloseIcon = new ImageIcon("icons/book_blue.png");
    	private Icon folderOpenIcon = new ImageIcon("icons/folder.png");
    	private Icon folderCloseIcon = new ImageIcon("icons/folder_closed.png");
    	private Icon fileIcon = new ImageIcon("icons/document.png");
     
     
    	@Override
    	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);
     
    		LogescoTreeNode node =
    			(LogescoTreeNode)value;
    		Object obj = node.getUserObject();
     
    		if(openIcon == null) {
     
    			openIcon = this.getOpenIcon();
     
    			if(openIcon != null) {
     
    				if(obj instanceof LProject) {
     
    					openIcon = projectOpenIcon;
    					this.setOpenIcon(openIcon);
    					openIcon = null;
     
    				} else if(obj instanceof LFolder) {
    					openIcon = folderOpenIcon;
    					this.setOpenIcon(openIcon);	
    					openIcon = null;
    				}
    			}
    		}
     
    		if(closeIcon == null) {
     
    			closeIcon = this.getClosedIcon();
     
    			if(closeIcon != null) {
     
    				if(obj instanceof LProject) {
    					closeIcon = projectCloseIcon;
    					this.setClosedIcon(closeIcon);
    					closeIcon = null;
     
    				} else if(obj instanceof LFolder) {
    					closeIcon = folderCloseIcon;
    					this.setClosedIcon(closeIcon);
    					closeIcon = null;
    				}
    			}
    		}
    		this.setLeafIcon(fileIcon);
     
     
    		return this;
    	}
    Si qqun saurait m'expliquer pourquoi il y a un mélange dans les icones, ou une meilleur façon de coder pour avoir ce que je souhaite, merci a vous.
    David

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ca ne marche pas car ton Renderer est global à l'arbre. Ton if(openIcon == null) n'est appelé donc qu'une fois pour le premier noeud.

    Voici une correction qui devrait marcher.

    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
    public class MyTreeCellRenderer extends DefaultTreeCellRenderer {
     
       private Icon projectOpenIcon = new ImageIcon("icons/book_open.png");
       private Icon projectCloseIcon = new ImageIcon("icons/book_blue.png");
       private Icon folderOpenIcon = new ImageIcon("icons/folder.png");
       private Icon folderCloseIcon = new ImageIcon("icons/folder_closed.png");
       private Icon fileIcon = new ImageIcon("icons/document.png");
     
     
       @Override
       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);
     
          LogescoTreeNode node =
             (LogescoTreeNode)value;
          Object obj = node.getUserObject();
     
    if (obj instanceof LProjet) {
         this.setIcon(expanded ? projectOpenIcon : projectCloseIcon);
    } else if (obj instanceof LFolder) {
         this.setIcon(expanded ? folderOpenIcon: folderCloseIcon);
    } else {
        this.setIcon(fileIcon);
    }
     
     
          return this;
       }

  3. #3
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Par défaut
    Salut natha,

    Sa marche beaucoup mieux merci de ton aide.

Discussions similaires

  1. [Swing]JTable- Dimensionner les colonnes
    Par loutfi dans le forum Composants
    Réponses: 12
    Dernier message: 01/07/2011, 08h50
  2. [Swing]Affichage classe extends JPanel
    Par Quentin D dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 03/08/2007, 12h58
  3. [SWING]jTable + Focus
    Par chady dans le forum Composants
    Réponses: 5
    Dernier message: 27/02/2003, 14h51
  4. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 10h35

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