Pb Jtree et icone !!! grrrrrrrrrr

fmazoue Messages postés 335 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 1 septembre 2015 - 29 juil. 2004 à 19:53
fmazoue Messages postés 335 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 1 septembre 2015 - 3 août 2004 à 18:45
ENcore un problème ! Ca change !

Bon voilà que j'explique ce qui me tracasse !

J'ai fait un JTree qui permet d'avoir une arborescence de ses fichier de son ordi !

(ps : g resolu le pb du lecteur disquette avec son erreur !) :-)

De plus j'arrive a recuperer les icone associé au différent format de fichier ! : le pb c pour les affiché ! en effet quand je veux mettre mes icone eh bien ils sont tous pareils !

voila ma source ! si qqn peut m'aider !

package XploS.component;

import java.lang.*;
import java.io.*;
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.HeadlessException;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Iterator;

public class JTreeFolder2 extends JPanel {

protected DefaultMutableTreeNode racine;
protected JTree tree;
protected JScrollPane scrollpane;


private class NodeWithFile extends DefaultMutableTreeNode {
File file;

public NodeWithFile(Object userObject) {
super(userObject);
}

public NodeWithFile(Object userObject, File newFile) {
super(userObject);
file = newFile;
}

public File getFile() {
return file;
}
}


/*private class TreeRenderer extends DefaultTreeCellRenderer {

public TreeRenderer() {

}

public void TreeRenderer (NodeWithFile node) {
File file = node.getFile();
setIcon(javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(file));

}

}*/

class Renderer extends DefaultTreeCellRenderer {
Icon icon;


public Renderer(Icon icone) {
icon = icone;

}

public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {

super.getTreeCellRendererComponent(
tree, value, sel,
expanded, leaf, row,
hasFocus);
setIcon(icon);



return this;
}
}



public JTreeFolder2() throws HeadlessException {
File[] drive;
tree = new JTree();
racine = new DefaultMutableTreeNode("Poste de travail");
final DefaultTreeModel model = new DefaultTreeModel(racine);
DefaultTreeCellRenderer renderer;

drive = File.listRoots();

for (int i = 0 ; i < drive.length ; i++) {
renderer = new Renderer(javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(drive[i]));

//System.out.println(javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(drive[i]));
//renderer.set
//renderer
//renderer.setClosedIcon(javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(drive[i]));

NodeWithFile node = new NodeWithFile(drive[i], drive[i]);

tree.setCellRenderer(renderer);





/*TreeRenderer renderer = new TreeRenderer();
renderer.TreeRenderer(node);
tree.setCellRenderer(renderer);*/
addFolderTemp(drive[i], node);
racine.add(node);
}




tree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
try{
DefaultTreeCellRenderer renderer;
TreePath path = evt.getPath();
NodeWithFile node = (NodeWithFile)path.getLastPathComponent();//
node.removeAllChildren();
renderer = new Renderer(javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(node.getFile()));
tree.setCellRenderer(renderer);
addFolder(node.getFile(), node, 1);

((DefaultTreeModel)tree.getModel()).reload(node);
}
catch (Exception ex) {
System.out.println("prout"+ex);
}
}
});


tree.addTreeExpansionListener(new TreeExpansionListener() {
public void treeExpanded(TreeExpansionEvent e) {

try{
DefaultTreeCellRenderer renderer;
TreePath path = e.getPath();
NodeWithFile node = (NodeWithFile)path.getLastPathComponent();//
node.removeAllChildren();
renderer = new Renderer(javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon(node.getFile()));
tree.setCellRenderer(renderer);

addFolder(node.getFile(), node, 1);

((DefaultTreeModel)tree.getModel()).reload(node);
}
catch (Exception ex) {
System.out.println("prout"+ex);
}
}
public void treeCollapsed(TreeExpansionEvent e) {
// lorsqu'un noeud est refermé
//RIEN
//voir ultérieurement si il ne faut pas faire removeAllChildren() !!!
}
});





tree.setModel(model);

scrollpane = new JScrollPane();
scrollpane.getViewport().add(tree, null);
super.add(scrollpane);

}







public static void main(String[] arg)
{
JFrame frame = new JFrame();
JTreeFolder2 arbre = new JTreeFolder2();
frame.getContentPane().add(arbre, BorderLayout.CENTER);
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
}








private void addFolder(File driveOrDir, DefaultMutableTreeNode node, int level) {
File[] fileList;

fileList = driveOrDir.listFiles();

try {
for (int i = 0; i < fileList.length; i++) {
System.out.println(fileList[i].getName());
NodeWithFile dir = new NodeWithFile(fileList[i].getName(), fileList[i]);
if(fileList[i].isDirectory() == true) {
System.out.println(fileList[i].getName());
addFolderTemp(fileList[i], dir);
}

node.add(dir);
}
}
catch (NullPointerException e) {
return;
}


}

//Permet l'ajout d'un node temporaire
public void addFolderTemp(File file, NodeWithFile node) {
NodeWithFile temp = new NodeWithFile(file);
node.add(temp);
}

}

niarf :-p

7 réponses

cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
29 juil. 2004 à 21:58
ton arbre n'a qu'un seul TreeCellRenderer
il faut don que ce soit celui-ci qui choisisse tout seul comme un grand la bonne icone

tu le donnes une fois pour toute lorsque tu construit l'arbre

pour le TreeCellRenderer, tu peux faire un truc du genre :

public class RenduCellules extends DefaultTreeCellRenderer{

public RenduCellules() {
super();
}

public Component getTreeCellRendererComponent(
JTree tree,Object value,boolean selected,boolean expanded,boolean leaf,int row,boolean hasFocus) {

if (leaf) {

DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
//là, tu récupères ton fichier à partir du Node
//tu récupère sons icone
setLeafIcon(iconeDeMonFichier);

}
super.getTreeCellRendererComponent(
tree,value,selected,expanded,leaf,row,hasFocus);
return this;
}
}

au passage, sur d'anciennes versions de la JVM (je pense jusqu'à la 1.3), le getSystemIcon était totallement buggé

A+
Dobeliou
[Il ne faut jamais jouer à saute-mouton avec une licorne]
0
fmazoue Messages postés 335 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 1 septembre 2015 1
30 juil. 2004 à 19:56
Je suis peut etre débile mais je capte pas sa marche pas !! je dois pas trop bien faire mon truc !
tu pourrais essayé mon code et le modifier pour que sa marche parce que j'ai beau essayé eh bien je capte pas !!!!
niarf :-p
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
30 juil. 2004 à 21:08
voila
tu m'excuseras, j'ai un peu nettoyé (cad retiré les commentaires, viré le main...) pour m'y retrouver
ca marche!
j'ai eu un bug sur un fichier système de windows : C:\hiberfil.sys
il disait que le fichier existe pas
j'ai été obligé de mettre un test : node.file != null && node.file.exists()

import java.io.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class JTreeFolder2
extends JPanel {

protected DefaultMutableTreeNode racine;
protected JTree tree;
protected JScrollPane scrollpane;

private class NodeWithFile
extends DefaultMutableTreeNode {
File file;

public NodeWithFile(Object userObject) {
super(userObject);
}

public NodeWithFile(Object userObject, File newFile) {
super(userObject);
file = newFile;
}

public File getFile() {
return file;
}
}

class Renderer
extends DefaultTreeCellRenderer {

public Renderer() {
super();
}

public Component getTreeCellRendererComponent(
JTree tree, Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {

if (leaf) {

NodeWithFile node = (NodeWithFile) value;
if (node.file != null && node.file.exists()) {
Icon icone = javax.swing.filechooser.FileSystemView.getFileSystemView().
getSystemIcon(node.file);
setLeafIcon(icone);
}
else
setLeafIcon(getDefaultLeafIcon());
}
super.getTreeCellRendererComponent(
tree, value, selected, expanded, leaf, row, hasFocus);
return this;
}
}

public JTreeFolder2() throws HeadlessException {
File[] drive;
tree = new JTree();
racine = new DefaultMutableTreeNode("Poste de travail");
final DefaultTreeModel model = new DefaultTreeModel(racine);
tree.setCellRenderer(new Renderer());
drive = File.listRoots();

for (int i = 0; i < drive.length; i++) {

NodeWithFile node = new NodeWithFile(drive[i], drive[i]);
addFolderTemp(drive[i], node);
racine.add(node);
}

tree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
try {
DefaultTreeCellRenderer renderer;
TreePath path = evt.getPath();
NodeWithFile node = (NodeWithFile) path.getLastPathComponent(); //
node.removeAllChildren();
addFolder(node.getFile(), node, 1);

( (DefaultTreeModel) tree.getModel()).reload(node);
}
catch (Exception ex) {
System.out.println("prout" + ex);
}
}
});

tree.addTreeExpansionListener(new TreeExpansionListener() {
public void treeExpanded(TreeExpansionEvent e) {

try {
DefaultTreeCellRenderer renderer;
TreePath path = e.getPath();
NodeWithFile node = (NodeWithFile) path.getLastPathComponent(); //
node.removeAllChildren();

addFolder(node.getFile(), node, 1);

( (DefaultTreeModel) tree.getModel()).reload(node);
}
catch (Exception ex) {
System.out.println("prout" + ex);
}
}

public void treeCollapsed(TreeExpansionEvent e) {
// lorsqu'un noeud est refermé
//RIEN
//voir ultérieurement si il ne faut pas faire removeAllChildren() !!!
}
});

tree.setModel(model);

scrollpane = new JScrollPane();
scrollpane.getViewport().add(tree, null);
super.add(scrollpane);

}

private void addFolder(File driveOrDir, DefaultMutableTreeNode node,
int level) {
File[] fileList;

fileList = driveOrDir.listFiles();

try {
for (int i = 0; i < fileList.length; i++) {
System.out.println(fileList[i].getName());
NodeWithFile dir = new NodeWithFile(fileList[i].getName(), fileList[i]);
if (fileList[i].isDirectory() == true) {
//System.out.println(fileList[i].getName());
addFolderTemp(fileList[i], dir);
}

node.add(dir);
}
}
catch (NullPointerException e) {
return;
}

}

//Permet l'ajout d'un node temporaire
public void addFolderTemp(File file, NodeWithFile node) {
NodeWithFile temp = new NodeWithFile(file);
node.add(temp);
}

}

yop

A+
Dobeliou
[Il ne faut jamais jouer à saute-mouton avec une licorne]
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
30 juil. 2004 à 21:11
euh, sinon, il reste une déclaration DefaultTreeCellRenderer renderer; inutile quelque part dans tree.addTreeExpansionListener
et le paramètre level dans addFolder semble inutile
;-p

Dobeliou
[Il ne faut jamais jouer à saute-mouton avec une licorne]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fmazoue Messages postés 335 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 1 septembre 2015 1
31 juil. 2004 à 20:03
Merci ! sa va bien me faire avancé !!
m'enfin faut quand même que je modifie des petits trucs : exemple, les icônes des lecteurs ne sont pas affiché !
niarf :-p
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
31 juil. 2004 à 20:51
oups oui, en effet ;-p
il suffit sans doute de retirer le if (leaf) dans le Renderer
(leaf indique que c'est un noeud terminal)

Salut
Dobeliou
[Il ne faut jamais jouer à saute-mouton avec une licorne]
[il est temps de rechanger de dicton, je cherche...]
0
fmazoue Messages postés 335 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 1 septembre 2015 1
3 août 2004 à 18:45
Ehb bien quand on enlecve le if(leaf) sa bug ! je va chercher et si je trouve pas je vous le direz merci !
niarf :-p
0
Rejoignez-nous