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
| private JTree getTree() {
int j = 0;
double d;
//Je groupe mes fichiers par 25 dans chaque noeud parent
int nRoot = 25;
//root est le noeud principal
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Listing of layers");
//rootNode sont les noeuds qui contiennent 25 sous-noeuds
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
//node sont les noeuds de base
DefaultMutableTreeNode node = new DefaultMutableTreeNode();
//listObjectFileName.get(i) est une ArrayList contenant le nom de mes fichiers
//Enumération de tous ses composants
for (int i = 0 ; i<listObjectFileName.size() ; i++) {
if (i == nRoot * j) {
if (nRoot * (j+1) > listObjectFileName.size()) {
rootNode = new DefaultMutableTreeNode(listObjectFileName.get(i) + " - " + listObjectFileName.get(listObjectFileName.size()-1));
}
else {
rootNode = new DefaultMutableTreeNode(listObjectFileName.get(i) + " - " + listObjectFileName.get(nRoot * (j+1) - 1));
}//endif
root.add(rootNode);
j++;
}//endif
node = new DefaultMutableTreeNode(listObjectFileName.get(i));
rootNode.add(node);
}//endfor
tree = new JTree(root);
tree.setCellRenderer(myRenderer);
mouseTree = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
//selRow permet de savoir quel
int selRow = tree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if(selRow != -1) {
//gestion du simple clic
if(e.getClickCount() == 1) {
System.out.println("selRow = " + selRow);
}
//gestion du double-clic sur les sous-noeuds
else if(e.getClickCount() == 2) {
//selPath.getPathComponent(2) retourne l'objet "node" : les sous-noeuds quoi...
Object object = selPath.getPathComponent(2);
String objectString = object.toString();
//index pour savoir à quelle position dans la liste l'objet se situe
index = listObjectFileName.indexOf(objectString);
//listObjectIsOn est une ArrayList qui contient des "0" ou des "1" pour savoir si l'objet en question est affiché
if (listObjectIsOn.get(index).toString() == "1") {
//on fabrique un BranchGroup vide pour remplacer un BranchGroup existant : supprimer un objet à l'écran
emptyObject = new BranchGroup();
emptyObject.setCapability(BranchGroup.ALLOW_DETACH);
emptyObject.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
emptyObject.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
emptyObject.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
//objectLoaded est le BranchGroup parent regroupant les BranchGroup contenant des objets
objectLoaded.setChild(emptyObject, index);
//mettre l'objet à "0"
listObjectIsOn.set(index, "0");
}
else {
//on créé un nouveau BranchGroup pour ajouter l'objet correspondant au sous-noeud double-cliqué
BranchGroup addObject = loadWavefrontObject(listObjectFileName.get(index).toString());
//on remplace le BranchGroup actuel dans le BranchGroup objectLoaded par le nouveau créé
objectLoaded.setChild(addObject, index);
listObjectIsOn.set(index, "1");
}//endif
}//endif
}//endif
}//end mousePressed
};
return tree;
}
public class MyRenderer extends DefaultTreeCellRenderer {
public MyRenderer() {
super();
}
//Redéfini la méthode getTreeCellRendererComponent
public Component getTreeCellRendererComponent(JTree tree, Object value,boolean sel, boolean expanded, boolean leaf, int row,boolean hasFocus) {
//icône pour les objets présents
ImageIcon fold = new ImageIcon(getClass().getClassLoader().getResource("Pictures/File2.png"));
//icône pour les objets cachés à l'écran
ImageIcon fold2 = new ImageIcon(getClass().getClassLoader().getResource("Pictures/NoFile2.png"));
//icône pour les noeuds parents ouverts
ImageIcon fold3 = new ImageIcon(getClass().getClassLoader().getResource("Pictures/OpenNode.png"));
//icône pour les noeuds parents fermés
ImageIcon fold4 = new ImageIcon(getClass().getClassLoader().getResource("Pictures/ClosedNode.png"));
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
//test si c'est une feuille
if(leaf){
int num = listObjectFileName.indexOf(node.getUserObject().toString());
if (listObjectIsOn.get(num).toString() == "1") {
this.setLeafIcon(fold);
}
else {
this.setLeafIcon(fold2);
}
}
//noeud avec enfants
if(expanded){
//Cas du noeud « ouvert »
this.setOpenIcon(fold4);
}
else{
//Cas du noeud « fermé »
this.setClosedIcon(fold3);
}//endif
//on appelle ensuite la classe de base
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
return this;
}//end getTreeCellRendererComponent
}//end MyRenderer |
Partager