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;
/**
*
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 {
/**
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;
/**
*
- 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!
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.