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

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

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.