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 :

Explorateur-like : Dossier qui se répète et dossier inexistant


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Explorateur-like : Dossier qui se répète et dossier inexistant
    Bonjour à tous !

    Je suis en train de développer une Applet où je dois recréer sous forme de Jtree un explorateur ( les histoires de signatures sont déjà réglé ).

    Premier problème :
    Jusque là le contenu de l'ordinateur s'affiche normalement et j'arrive à parcourir mes dossiers sans problème, or si je déplie un nœud ( pour afficher le contenu d'un dossier ), que je le plie ( je cache ce contenu ) et que je re-déplie ce nœud ( je ré-ouvre le contenu, vous avez suivi ? ), les mêmes dossiers sont affichés mais en double.
    J'ai donc deux \Program Files, deux \php, etc.

    Voici le code, plus ou moins abrégé.

    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
    ........
    root = new DefaultMutableTreeNode("Poste de travail");
     
    File[] lecteurs = File.listRoots();
     
    for (int i = 0; i < lecteurs.length; ++i){
       DefaultMutableTreeNode nouveauLecteur = new DefaultMutableTreeNode(lecteurs[i].toString());
       if (nouveauLecteur != null) {
    	   root.add(nouveauLecteur);
    	}
    }
     
    treeModel = new DefaultTreeModel(root);
    tree = new JTree(treeModel);
    tree.addTreeSelectionListener(new ListenerNoeud());
    ......
    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
     
    .............
    class ListenerNoeud implements TreeSelectionListener{
    		public void valueChanged(TreeSelectionEvent e){
    			DefaultMutableTreeNode lenoeud = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
    			if (lenoeud  == null)
    			return;
    			developper(lenoeud);
    		}
    	}
     
    	void developper(DefaultMutableTreeNode n) {
    	// construction du chemin depuis la racine
    	TreeNode[] paths = n.getPath();
    	String path = "";
     
    	//On prend le chemin du repertoire courant( mais on zappe "poste de travail" )
    	for (int i = 1; i < paths.length; i++){
    	   if (paths[i].toString() != null){
    		   path = path+"\\"+paths[i];
    		   System.out.println(path);
    		}
    	}
     
    	//Ce fichier est le repertoire courant
    	File repertoire = new File(path.substring(1));
     
    	//On fait la liste des fichiers existants
    	File[] fichiers = repertoire.listFiles();
    		 if (fichiers == null) {
    			System.out.println("Directory does not exist or is not a Directory");
    		 }else{
     
    			int i = 0;
    			for (File leFichier : fichiers){
    				 System.out.println(leFichier.getName());
    				 if(leFichier.isDirectory() && leFichier != null){
    					 treeModel.insertNodeInto( new DefaultMutableTreeNode(leFichier.getName()), n, i);
    					 tree.expandPath( new TreePath(paths));
    					 i++;
    				 }else if(leFichier.isFile()){
    					 // a completer
    				 }
    			 }
    		 }
    	}
    ..........
    Je pense que les dossiers se répètent car le TreeSelectionListener est appelé à chaque fois qu'un nœud est déplié, même si du contenu existe déjà dans le nœud à ouvrir.

    Alors mon idée est soit de détruire à chaque fermeture ce contenu, soit d'empêcher la réécriture de ce contenu si il existe déja. Comment faire ?

    Deuxième problème, mais moindre :
    Des dossiers qui a priori, n'existent pas, apparaissent malgré tout. Tels que Documents and Settings.

    Ces dossiers font références au code déja vu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File[] fichiers = repertoire.listFiles();
    		 if (fichiers == null) {
    			System.out.println("Directory does not exist or is not a Directory");
    		 }
    Des suggestions pour qu'ils n'apparaissent pas dés la génération de l'arborescence ?

    Merci !

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai réglé le deuxième problème, il suffisait de tester le contenu d'un fichier entrant de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (int i = 0; i < lecteurs.length; ++i){
    		   if (lecteurs[i].list() != null) {
    			   DefaultMutableTreeNode nouveauLecteur = new DefaultMutableTreeNode(lecteurs[i].toString());
    			   root.add(nouveauLecteur);
    		   }
    		}

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Résolus !

    La méthode .isleaf() sur le noeud à tester permet de savoir si le répertoire contient des enfants, ou pas.

    J'espère que vous avez apprécié ce monologue !

Discussions similaires

  1. [AppleScript] Action de dossier qui ouvre un autre dossier
    Par Thib5 dans le forum AppleScript
    Réponses: 9
    Dernier message: 16/07/2013, 00h08
  2. Réponses: 4
    Dernier message: 08/03/2011, 10h21
  3. Virus qui crée plein de dossiers...
    Par Sheriff dans le forum Sécurité
    Réponses: 6
    Dernier message: 08/05/2006, 01h21
  4. Réponses: 2
    Dernier message: 19/09/2005, 18h20
  5. Le dossier qui stock les mots de passe
    Par cartonis dans le forum Sécurité
    Réponses: 21
    Dernier message: 17/08/2005, 13h49

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