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 :

Problème sur les JTree


Sujet :

Composants Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Problème sur les JTree
    Bonjour à tous

    j'ai besoin d'aide sur mon interface JTree

    je veux afficher tous les fichiers de mon arbre (fichier texte , image)

    je veux pouvoir faire une recherche sur n'importe quel noeux de l'arbre, et pouvoir télécharger n'importe quel donnée

    j'ai essayé avec le code suivant mais j'ai pas réussi

    alors voila le 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
    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    import javax.swing.*;
     
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;
    import java.util.Enumeration;
     
    import javax.swing.event.*;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeNode;
    import javax.swing.tree.TreePath;
     
     
    public  class Tree extends JFrame implements TreeSelectionListener {
     
    private JTree arbre;
    private JToolBar barre = new JToolBar();
    private JTextField jtf = new  JTextField("");
    private JButton bouton= new JButton("Search");
     
     
    public Tree() {
     super("DDSM");
     
     
     bouton.addActionListener(new BoutonListener());
     Font police = new Font("Arial", Font.BOLD, 14);
     jtf.setFont(police);
     jtf.setPreferredSize(new Dimension(150, 30));
     jtf.setForeground(Color.BLUE);
     jtf.setPreferredSize(new Dimension(150, 30));
     
     jtf.setEditable( true );
     barre.add(jtf);
     barre.add(bouton);
     
     
    construireArbre();
    add(barre, BorderLayout.SOUTH);
    add(new JScrollPane(arbre), BorderLayout.WEST);
     
    setSize(540, 300);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    }
     
    class BoutonListener implements ActionListener{
    String word; 
                   public void actionPerformed(ActionEvent e) {
                	   if(e.getSource() == bouton)
                	      {
                	        word=jtf.getText();
                	        String[] split = word.split("");
        					for (int i = 0; i < split.length; i++) {
        						 word= split[i];
        						 }
                	        findByName(arbre,split);
                	       }
     
     
                   }
     
           }
     
    public static void main(String[] args) { 
    	new Tree(); 
    	}
    private void construireArbre() {
     
    	DefaultMutableTreeNode root = new DefaultMutableTreeNode("DDSM");
     
    	String[] volums = DDsm.getVolums();
     
    	for (int i = 0; i < volums.length; i++) {
    		DefaultMutableTreeNode volume = new DefaultMutableTreeNode(volums[i],true);
     
    		// creation des noeuds case
    		String[] cases = DDsm.getCases(volums[i]);
    		for (int j = 0; j < cases.length; j++) {
    			DefaultMutableTreeNode ccase = new DefaultMutableTreeNode(cases[j],true);
     
    			// creation des noeuds fichier
    			String[] files = DDsm.getFiles(volums[i], cases[j]);
    			for (int k = 0; k < files.length; k++) {
    				ccase.add(new DefaultMutableTreeNode(files[k],false));
    			}
    			volume.add(ccase);
    		}
    		root.add(volume);
    	}
    	DefaultTreeModel treeModel = new DefaultTreeModel(root);
     
     
    arbre = new JTree(root,true);
    arbre.setPreferredSize(new Dimension(300, 1000));
     
    arbre.addTreeSelectionListener(this);
    arbre.setEditable(true);
     
    }
     
    public TreePath findByName(JTree tree, String[] names) {
        TreeNode root = (TreeNode) tree.getModel().getRoot();
        return find(new TreePath(root), names, 0, true);
    } 
     
    private TreePath find(TreePath parent, Object[] nodes, int depth, boolean byName) {
        TreeNode node = (TreeNode) parent.getLastPathComponent();
     
        Object o = node;
        if(o == null) return null;
     
        // If by name, convert node to a string
        if (byName)
            o = o.toString();
     
        // If equal, go down the branch
        if (o.equals(nodes[depth])) {
     
            // If at end, return match
            if (depth == nodes.length - 1)
                return parent;
     
            // Traverse children
            if (node.getChildCount() >= 0)
                for (Enumeration e = node.children(); e.hasMoreElements(); ) {
                    TreeNode n = (TreeNode) e.nextElement();
                    TreePath path = parent.pathByAddingChild(n);
                    TreePath result = find(path, nodes, depth + 1, byName);
     
                    // Found a match
                    if (result != null)
                        return result;
                }
        }
        // No match at this branch
        return null;
    } 
     
     
    @Override
    public void valueChanged(TreeSelectionEvent arg0) {
    	// TODO Auto-generated method stub
     
    }
     
     
     
     
     
    }
    merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    J'ai vite parcouru ton code, et je pense que ton problème vient de ta racine qui s'appelle "DDSM" et que tu ne traites pas dans ta méthode récursive find : comme un path de fichier c'est un truc du genre "c:/truc/bidule", ou /truc/bidule, il n'y a jamais égalité entre le premier token du path cherché et la chaîne "DDSM". Il faudrait que tu l'ignore dans ton parcourt d'arbre, ou que tu mettres systématiquement un token "DDSM" au début du path cherché.

    EDIT : j'avais pas vu ça aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] split = word.split("");
    Là, tu découpes ton path par rapport au séparateur chaîne vide, donc tu obtiens un tableau dont chaque élément est un caractère de la chaîne. Il faut que tu split par rapport à un séparateur, à priori de fichier (/ ou \, ou les deux...).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    bonjour

    merci pour votre réponse, mais la recherche que j'essaie de faire c'est pour la recherche dans le JTree de n'importe quel donnée saisi dans un JTextField non pas sur le path .

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Bah, c'est bien pour ça que tu découpes le path en tokens (par split), je suppose. Ensuite, tu récupères le nom de chaque node pour comparaison avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (byName)
            o = o.toString();
    Bon, ce n'est pas une méthode très propre que de remplacer l'objet TreeNode (sans parler de repasser en Object[] les String[] contenant les tokens) par un String, mais si la méthode toString() des objets qui sont mis dans les TreeNode (userObject) retourne bien leur nom, ça doit fonctionner. Sinon, il faudra aller chercher la bonne information dans le TreeNode, pour la récupérer (ce qui suppose d'utiliser une implémentation concrète qui a une méthode pour le faire (comme DefaultMutableTreeNode,par exemple).

    Maintenant si la chaîne de recherche n'est pas elle-même un path, il suffit de ne pas la découper en token, et de la transmettre à la place du tableau de tokens : en plus, la condition de récursivité n'est plus soumise à l'égalité du token et du nom du node (on doit descendre dans toutes les branches tant qu'on a pas trouvé de nœud correspondant au terme cherché.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Problème sur les selects multiples
    Par Nag_Champa dans le forum Langage
    Réponses: 4
    Dernier message: 15/12/2006, 16h02
  2. Problème sur les dates
    Par Littlecoda dans le forum Oracle
    Réponses: 7
    Dernier message: 07/07/2006, 11h39
  3. problème sur les threads et les sémaphores
    Par ramislebob dans le forum Windows
    Réponses: 1
    Dernier message: 29/06/2006, 11h52
  4. Réponses: 6
    Dernier message: 31/03/2006, 17h05
  5. j'ai un problème sur les hinstances
    Par ramaro dans le forum C++
    Réponses: 9
    Dernier message: 26/02/2006, 14h32

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