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
| package outils_graphiques.models;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import javax.swing.event.TreeModelListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Arrays;
import java.io.FileFilter;
import java.io.File;
public class FileTreeModel implements TreeModel, FileFilter {
private static final Object virtualLeaf = new Object();
private static final Object virtualRoot = new Object();
private HashMap map;
private File[] roots;
public FileTreeModel(File[] roots){
this.map = new HashMap();
this.roots = roots;
}
public boolean accept(File file){
//if(file.isDirectory() || file.getName().endsWith(".pdf")) return true;
//else return false;
return true;
}
public Object getRoot(){
return virtualRoot;
}
public boolean isLeaf(Object node){
return map.get(node) == virtualLeaf;
}
public int getChildCount(Object node){
ArrayList children = getChildren(node);
if (children == null) return 0;
return children.size();
}
public Object getChild(Object parent, int index){
return getChildren(parent).get(index);
}
public int getIndexOfChild(Object parent, Object child){
return getChildren(parent).indexOf(child);
}
protected ArrayList getChildren(Object node) {
if(node==virtualRoot){
ArrayList children = new ArrayList(roots.length);
for (int len = roots.length, i = 0; i < len; i++) children.add(roots[i]);
return children;
}
File f = (File)node;
Object value = map.get(f);
if (value == virtualLeaf) return null;
ArrayList children = (ArrayList)value;
if (children == null) {
File[] c = f.listFiles(this);
if (c != null) {
Arrays.sort(c);
children = new ArrayList(c.length);
for (int len = c.length, i = 0; i < len; i++) {
children.add(new File(c[i].getPath()){
public String toString(){
return this.getName();
}
});
if (!c[i].isDirectory()) map.put(c[i], virtualLeaf);
}
}
else children = new ArrayList(0);
map.put(f, children);
}
return children;
}
public void valueForPathChanged(TreePath path, Object value){}
public void addTreeModelListener(TreeModelListener l){}
public void removeTreeModelListener(TreeModelListener l){}
} |
Partager