[jtree] arboressance d'un disque dur simple et rapide

Soyez le premier à donner votre avis sur cette source.

Vue 22 072 fois - Téléchargée 2 056 fois

Description

Bonjour,
Ce code à été réalisé par un de mes collègue qui m'aide sur un projet.
C'est donc à lui que revient tout le mérite, et il en a!
donc ce Code permet de créer une arboressance rapidement à partir des fichier contenu sur le disque.
Je dis rapide, car le programme ne scanne pas tout le disque, c'est seulement lorsque vous allez déplier un répertoire qu'il va aller lister son contenu.
Sur ce amusez vous bien.

Source / Exemple :


Class : MainWindow
Code:
/*

  • Created on 9 mars 2005
  • Ceci est la class contenant l'interface graphique
  • C'est ici que tout ce joue! ;p
*
  • /
package mwt.waldo; import java.awt.BorderLayout; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultTreeModel; /**
  • @author Waldo2188
*
  • /
public class MainWindow extends JFrame { private static final long serialVersionUID = 1L; private JTree myTree; private DefaultTreeModel MyDefaultTree; public MainWindow(){ //titre de l'application super("Explorateur"); //initialisation des composants initComponent(); } private void initComponent() { //arrete l'application java lorsque lon quite la fenètre, mais le thread lancé continu son office setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //Instanciation de la Class Jtree //On passe en paramètre un Model //MyTreeModel est une classe qui hérite de DefaultTreeModel MyDefaultTree = new MyTreeModel(); myTree = new JTree(MyDefaultTree); //Ajout de l'arboressenece lorsqu'un répertoire est ouvert myTree.addTreeExpansionListener(new myExpensionListener()); //Sélection d'une feuille myTree.addTreeSelectionListener(new myTreeSelectionListener()); //Instantiation de La Class JScrollPanne afin de pouvoir bénéficier des ascenceur. JScrollPane scrollPane = new JScrollPane(myTree); getContentPane().add(scrollPane,BorderLayout.CENTER); Box myJp = Box.createVerticalBox(); myJp.add(Box.createGlue()); //Ajout d'un label JLabel myJl = new JLabel(); myJl.setText("Fichier Sélectionné :"); myJp.add(myJl); setSize(600,400); setVisible(true); } public static void main(String[] args) { //instanciation de la fenêtre new MainWindow(); } public JTree getMyTree() { return myTree; } public void setMyTree(JTree myTree) { this.myTree = myTree; } public void Close(){ dispose(); } public DefaultTreeModel getMyDefaultTree() { return MyDefaultTree; } } Class : myExpensionListener Code: /*
  • Class myExpensionListener
  • Ici on effectue une action lorsqu'un répertoire est déplié!
*
  • /
package mwt.waldo; import javax.swing.JTree; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; public class myExpensionListener implements TreeExpansionListener { /**
  • Constructeur de la Class
  • /
public myExpensionListener() { super(); // TODO Auto-generated constructor stub } //S'exécute lorsque lorsque qu'un dossier est ouvert public void treeExpanded(TreeExpansionEvent arg0) { //Appele de la fonction addChildren de la classe TreeUtil //Elle demande en paramètre DefaultTreeModel, DefaultMutableTreeNode TreeUtil.addChildren((DefaultTreeModel)((JTree)arg0.getSource()).getModel(),(DefaultMutableTreeNode)arg0.getPath().getLastPathComponent()); } /*getSource est une Instance de JTree, ce qui va nous permetre de pouvoir utiliser getModel qui retourne un TreeModel
  • qui lui pourras être casté en DefaultTreeModel.
  • getPath donne le chemin complet du répertoire ouvert depuis la racine.
  • getLastPathComponent retourne le nom du dernier répertoire
  • /
//on n'effectue aucune action lorsque qu'un répertoire est fermé public void treeCollapsed(TreeExpansionEvent arg0) { } } Class MyFile : Code: package mwt.waldo; import java.io.File; public class MyFile extends File { /**
  • @param arg0
  • /
public MyFile(String arg0) { super(arg0); } public String toString() { return getName(); } } Class MyTreeModel : Code: package mwt.waldo; import java.io.File; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; public class MyTreeModel extends DefaultTreeModel { /** *
  • /
public MyTreeModel() { //création du premier neux super(new DefaultMutableTreeNode(new MyFile("C:\\"))); // Appele de la fonction addChildren de la classe TreeUtil //Elle demande en paramètre DefaultTreeModel, DefaultMutableTreeNode TreeUtil.addChildren(this,(DefaultMutableTreeNode)getRoot()); /*
  • This représente cette class
  • getRoot est une méthode de la classe DefaultTreeModel
  • /
} public boolean isLeaf(Object arg0) { return !((File)((DefaultMutableTreeNode)arg0).getUserObject()).isDirectory(); /*
  • isLeaf permet de savoir si l'objet passé en paramètre est une feuille ou non.
  • Et ici on va testé si cette objet est un répertoire ou non
  • on caste notre argument en File afin d'utiliser la methode isDirectory()
  • /
} } Class myTreeSelectionListener : Code: package mwt.waldo; import java.awt.Component; import java.io.File; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.Component; import java.io.File; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; /**
  • @author G909248
*
  • TODO To change the template for this generated type comment go to
  • Window - Preferences - Java - Code Style - Code Templates
  • /
public class myTreeSelectionListener implements TreeSelectionListener { public myTreeSelectionListener(){ super(); } /* (non-Javadoc)
  • @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
  • /
public void valueChanged(TreeSelectionEvent arg0) { DefaultMutableTreeNode f = (DefaultMutableTreeNode) arg0.getPath().getLastPathComponent(); File ff = (File) f.getUserObject(); MainWindow mainWindow = (MainWindow) javax.swing.SwingUtilities.windowForComponent((Component)arg0.getSource()); if(!ff.isDirectory()){ //action si ca n'est pas un répertoire }else{ //action si c'est un répertoire } System.out.println(ff.isDirectory()); System.out.println(ff.getAbsolutePath()); } } Class TreeUtil : Code: package mwt.waldo; import java.io.File; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; public class TreeUtil { /** *
  • /
protected static void addChildren(DefaultTreeModel treeModel,DefaultMutableTreeNode parentNode) { //Création d'un Fichier avec le nom du répertoire ouvert File selectedFile = (File)parentNode.getUserObject(); //on supprime tout les enfants du répertoire ouvert parentNode.removeAllChildren(); //On informe le treeModel que sa Structure à changé treeModel.nodeStructureChanged(parentNode); //Listage du répertoire File[] children = selectedFile.listFiles(); int x = 0; //On crée en premier les répertoire for(int i=0;i<children.length;i++){ if(children[i].isDirectory()){ //On insert de nouveaux neux dans le treeModel treeModel.insertNodeInto(new DefaultMutableTreeNode(new MyFile(children[i].getAbsolutePath())),parentNode,x); /*MyFile est une classe qui hérite de File
  • new MyFile(children[i].getAbsolutePath())) on crée un Fichier avec le chemin complet des fichiers qui on été listé.
  • Et grâce a ce chemin complet on va pouvoir créer un DefaultMutableTreeNode
  • /
x++; } } //On crée les fichiers for(int i=0;i<children.length;i++){ if(!children[i].isDirectory()){ treeModel.insertNodeInto(new DefaultMutableTreeNode(new MyFile(children[i].getAbsolutePath())),parentNode,x); x++; } } } }

Conclusion :


Pour utiliser ce code, créer un nouveau projet, puis créer chaque classe présenté dans le code, celle ci devrons porté le nom qui leur est donnée!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

selir
Messages postés
1
Date d'inscription
dimanche 3 septembre 2006
Statut
Membre
Dernière intervention
16 avril 2009
-
Beaucoup trop de ligne a mon gout et pas mal de chose inutile. J'ai épuré ton code waldo.
import java.awt.BorderLayout;
import java.io.File;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class MainWindow extends JFrame {

private static final long serialVersionUID = 1L;
private JTree myTree;
private DefaultTreeModel MyDefaultTree;

public static void main(String[] args) { new MainWindow(); }

public MainWindow(){
super("Explorateur");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

MyDefaultTree = new MyTreeModel();
myTree = new JTree(MyDefaultTree);
myTree.addTreeExpansionListener(new myExpensionListener());
myTree.addTreeSelectionListener(new myTreeSelectionListener());

getContentPane().add(new JScrollPane(myTree),BorderLayout.CENTER);
setSize(600,400);
setVisible(true);
}

class myExpensionListener implements TreeExpansionListener {

public myExpensionListener() { super(); }

public void treeExpanded(TreeExpansionEvent e) {
addChildren((DefaultTreeModel)((JTree)e.getSource()).getModel(),(DefaultMutableTreeNode)e.getPath().getLastPathComponent());
}

public void treeCollapsed(TreeExpansionEvent e) { }
}

class MyTreeModel extends DefaultTreeModel {

public MyTreeModel() {
super(new DefaultMutableTreeNode(new File("C:\")));
addChildren(this,(DefaultMutableTreeNode)getRoot());
}
public boolean isLeaf(Object e) {
return !((File)((DefaultMutableTreeNode)e).getUserObject()).isDirectory();
}
}

class myTreeSelectionListener implements TreeSelectionListener {

public myTreeSelectionListener(){ super(); }

public void valueChanged(TreeSelectionEvent arg0) {

DefaultMutableTreeNode f = (DefaultMutableTreeNode) arg0.getPath().getLastPathComponent();
File ff = (File) f.getUserObject();

if(!ff.isDirectory()) {/*action si ca n'est pas un répertoire*/}
else {/*action si c'est un répertoire*/}

System.out.println(ff.isDirectory());
System.out.println(ff.getAbsolutePath());
}
}

protected static void addChildren(DefaultTreeModel treeModel,DefaultMutableTreeNode parentNode) {

File selectedFile = (File)parentNode.getUserObject();
parentNode.removeAllChildren();
treeModel.nodeStructureChanged(parentNode);

File[] children = selectedFile.listFiles();

int x = 0;

for(int i=0;i<children.length;i++){
if(children[i].isDirectory()){
treeModel.insertNodeInto(new DefaultMutableTreeNode(new File(children[i].getAbsolutePath())),parentNode,x);
x++;
}
}

for(int i=0;i<children.length;i++){
if(!children[i].isDirectory()){
treeModel.insertNodeInto(new DefaultMutableTreeNode(new File(children[i].getAbsolutePath())),parentNode,x);
x++;
}
}
}
}
sheorogath
Messages postés
2465
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
10 -
si tu l'adapte en JSP tu ne pourras que lister l'arborescence du serveur etant donne que le code JSP s'execute cote serveur
si tu veux faire la meme chose, tu as le JS, ou encore les applets
amrouch14
Messages postés
1
Date d'inscription
jeudi 6 avril 2006
Statut
Membre
Dernière intervention
3 mars 2008
-
comment on peut adapter ce code pour fonctionner sur des pages jsp ???
sheorogath
Messages postés
2465
Date d'inscription
samedi 21 février 2004
Statut
Modérateur
Dernière intervention
29 janvier 2010
10 -
merci
mais meme si le code marche impecablement je suis allergique a ces representation
en attendant je vais essay de developper le mien
cs_Waldo2188
Messages postés
142
Date d'inscription
jeudi 12 février 2004
Statut
Membre
Dernière intervention
20 mai 2008
-
Pour ce qui est de l'affichage des autre disque dur, c'est un peu compliqué à expliqué. Mais, dés que j'ai le temps, je met cette source à jour!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.