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] TreeModel et noeud caché


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut [JTree] TreeModel et noeud caché
    bonjour,

    je suis en train de developper un TreeModel qui selon certains criteres affiche ou pas certains noeuds. J'ai une ebauche qui fonctionne a peu pres, mais c'est a le a peu pres qui est genant
    Ca marche presque avec un decalage de "1" dans les noeuds masqués (le premier noeud qui devrait etre masqué est affiché, le premier noeud suivant qui devrai etre affiché ne l'est pas).

    Pour mon TreeModel j'ai fait ca si vous pouvez y jeter un oeil (enfin un coup devrait suffire) si vous voyez une boulette.

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    public class HiddenNodeTreeModel extends DefaultTreeModel {
    	public HiddenNodeTreeModel(TreeNode root) {
    		super(root);
     
    	}
     
    	public HiddenNodeTreeModel(TreeNode root, boolean asksAllowsChildren) {
    		super(root, asksAllowsChildren);
     
    	}
     
    	@Override
    	public int getChildCount( Object parent ) {
    		System.out.println( "Entrée getChildCount for : " + ((AttributeTypedMutableTreeNode)parent).getType().getNomEnum() );
    		int res = 0;
     
    		if( parent == root ){
    			res = 1;
    		} else {
    			if ( parent instanceof AttributeTypedMutableTreeNode ) {
    				AttributeTypedMutableTreeNode node = (AttributeTypedMutableTreeNode)parent;
     
    				if( !node.isLeaf() ) {
    					Enumeration enu = node.children();
     
    					while( enu.hasMoreElements() ) {
    						AttributeTypedMutableTreeNode child = (AttributeTypedMutableTreeNode)enu.nextElement();
    						if( child.isVisible() ) {
    							res += 1;
    						}
     
    					}
    				}
    			}
    		}
    		System.out.println( "sortie getChildCount res = " + res );
     
    		return res ;
    	}
     
    	@Override
    	public int getIndexOfChild(Object parent, Object child) {
    		System.out.println( "Entrée getIndexOfChild for : " + ((AttributeTypedMutableTreeNode)parent).getType().getNomEnum() );
    		if( ( parent!= root )
    		&& ( parent instanceof AttributeTypedMutableTreeNode )
    		&& ( child instanceof AttributeTypedMutableTreeNode ) ){
    			AttributeTypedMutableTreeNode pere = (AttributeTypedMutableTreeNode)parent;
    			AttributeTypedMutableTreeNode fils = (AttributeTypedMutableTreeNode)child;
     
    			if( !pere.isLeaf() ) {
    				Enumeration enu = pere.children();
    				int res = -1;
     
    				while( enu.hasMoreElements() ) {
    					AttributeTypedMutableTreeNode tmp = (AttributeTypedMutableTreeNode)enu.nextElement();
     
    					if( ( tmp.isVisible() )
    					&& ( !tmp.equals( fils ) ) ){
    						res += 1;
    					}
     
    					if( tmp.equals( fils ) ) {
    						System.out.println( "Sortie getIndexChild count : " + res );
    						return res;
    					}
     
    					tmp = (AttributeTypedMutableTreeNode)tmp.getNextSibling();
    				}
    			}
    		}
     
    		System.out.println( "Sortie raté getIndexOfChild" );
    		return 0;
    	}
     
    	public Object getChild( Object parent, int index ) {
    		System.out.println( "Entrée getChild for : " + ((AttributeTypedMutableTreeNode)parent).getType().getNomEnum() );
    		Object res = null;
     
    		if( parent == root ) {
    			res = ((AttributeTypedMutableTreeNode)root).getFirstChild();
    		} else {
    			if( ( parent != null )
    			&& ( parent instanceof AttributeTypedMutableTreeNode ) ) {
    				AttributeTypedMutableTreeNode tmp = (AttributeTypedMutableTreeNode)parent;
    				if( ( !tmp.isLeaf() )
    				&& ( tmp.getChildCount() >= index ) ){
    					res = tmp.getChildAt( index );
    				}
    			}
    		}
     
    		System.out.println( "Entrée getChild obj res : " + res );
    		return res;
    	}
    }
    Merci d'avance

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    vini vidi vici !!!
    probleme sur le getChild, je ne traite que les visibles !!!
    il est devenu comme ca pour ceux que ca interesse

    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
     
    public Object getChild( Object parent, int index ) {
    		Object res = null;
     
    		if( parent == root ) {
    			res = ((AttributeTypedMutableTreeNode)root).getFirstChild();
    		} else {
    			if( ( parent != null )
    			&& ( parent instanceof AttributeTypedMutableTreeNode ) ) {
    				AttributeTypedMutableTreeNode tmp = (AttributeTypedMutableTreeNode)parent;
     
    				Enumeration enu = tmp.children();
    				int cpt = 0;
    				while( enu.hasMoreElements() && cpt <= index ) {
    					res = (AttributeTypedMutableTreeNode)enu.nextElement();
    					if( ((AttributeTypedMutableTreeNode)res).isVisible() ) {
    						cpt++;
    					}
    				}
    			}
    		}
     
    		return res;
    	}
    je clos le thread

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

Discussions similaires

  1. [JTree] Icônes des noeuds
    Par seiryujay dans le forum Composants
    Réponses: 4
    Dernier message: 01/09/2005, 11h22
  2. [JTree] Récupérer le noeud sélectionné, sans événement
    Par Bobsinglar dans le forum Composants
    Réponses: 4
    Dernier message: 26/05/2005, 18h06
  3. [Jtree] revenir au noeud precedemment selectionné
    Par maxxou dans le forum Composants
    Réponses: 4
    Dernier message: 03/01/2005, 20h10
  4. Réponses: 3
    Dernier message: 09/08/2004, 12h24
  5. Réponses: 3
    Dernier message: 27/07/2004, 12h01

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