Arborescence et checkbox

cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004 - 1 juil. 2004 à 12:14
cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004 - 5 juil. 2004 à 14:37
Bonjour,
Je suis en stage actuellement et je dois faire une arborescence des fichiers d'un ordi avec des checkboxs devant chaque dossier et sous dossier.
Mon arborescence fonctionnne mais je n'arrive pas à rajouter les checkboxs devant. Quelqu'un pourrait me dire comment je peux coder en rajout de checkbox pendant mon exploration du disque dur??

Merci d'avance

11 réponses

wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
1 juil. 2004 à 14:56
je crois qu'il faut utiliser setCellRenderer de JTree
0
cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004
1 juil. 2004 à 15:27
Merci pour ta réponse

Mais je ne comprends pas comment ça marche. De plus j'ai regardé la doc dessus mais ça n'a pas l'air de convenir à ce que je cherche à faire
Parce que moi je voudrais qu'il y ait toujours dans mon arborescence les images de dossiers et de fichiers avec dc des checkboxs devant alors qu'avec setCellRenderer il remplace par des cases à cocher les images

merci d'avance
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
1 juil. 2004 à 15:49
tu renvoies un panel avec les un checkbox et une image....
0
cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004
1 juil. 2004 à 16:34
Merci bien mais je ne croispas que ça marche car les images de dossiers sont créées automatiquement par java. Je ne vois pas d'où elles sortent.
Si tu regarde mon code je ne gere aucune image donc je ne vois pas comment faire
Voici mon code:

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

public class Exploration2 extends JFrame {
private JScrollPane scrollpane;

public Exploration2() {
int i;
File[] lecteurs;

JTree arbre = new JTree();

/* création d'un noeud */
DefaultMutableTreeNode racine = new DefaultMutableTreeNode("Poste de travail");
//JCheckBox jojo = new JCheckBox();

lecteurs=File.listRoots();
for(i=0;i<lecteurs.length;i++)
{
/* crée un checkbox pour chaque lecteur */
JCheckBox jcb = new JCheckBox();
/* créé un noeud pour chaque lecteur */
DefaultMutableTreeNode noeud = new DefaultMutableTreeNode(lecteurs[i]);
/* créé l'arborescence pour chaque lecteur*/
ajout_dossier(lecteurs[i],noeud);
/* ajouter le lecteur avec son arborescence au noeud racine*/
racine.add(noeud);
}

/* model de l'arbre */
DefaultTreeModel model =new DefaultTreeModel(racine);
arbre.setModel(model);
/*ajouter l'arbre à la JFrame*/
getContentPane().add(arbre);

// ajout du JTree au formulaire pour permettre la mise en place d'onglets sur les cotés
scrollpane = new JScrollPane();
getContentPane().add(scrollpane, BorderLayout.CENTER);
scrollpane.getViewport().add(arbre, null);

/* fermer l'application */
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

/**************************************************************************
* nom : ajout_dossier *
* rôle : ajouter les dossiers et fichiers d'un lecteur *
**************************************************************************/
public void ajout_dossier(File lecteur,DefaultMutableTreeNode noeud)
{
int i;
File[] liste;
/* listFiles retourne tous les nom de fichiers et de sous-répertoires contenu dans un répertoire*/
liste=lecteur.listFiles();
try
{
for(i=0;i<liste.length;i++)
{
/* on teste si c'est un répertoire */
if(liste[i].isDirectory()==true)
{
/* si tel est le cas on crée un nouveau noeud */
DefaultMutableTreeNode sous_rep = new DefaultMutableTreeNode(liste[i]);

/*que l'on ajoute au noeud précédent */
noeud.add(sous_rep);
/* et on regarde le contenu de ce nouveau répertoire méthode récursive */
ajout_dossier(liste[i],sous_rep);
}
/* si ce n'est pas un dossier c'est donc un fichier que l'on va donc gréffer au noeud courant*/
else
noeud.add(new DefaultMutableTreeNode(liste[i]));
}
}
catch(NullPointerException e)
{
//exception que l'on obtient lorsqu'il n'y a plus de répertoire ou de fichier
}
}
}
0

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

Posez votre question
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
2 juil. 2004 à 16:09
regarde cet exemple :
http://www.javafr.com/forum.v2.aspx?ID=180417
-------------------
>:) dams >:)
-------------------
0
cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004
5 juil. 2004 à 12:06
Bonjour,
Je suis allé voir l'exemple mais contrairement donc à l'exemple moi je ne rentre pas en dur les infos de mon arbre mais je fais plutot un File.listRoots pour avoir la liste de disques durs de l'ordi et je ne peux pas faire un :
lecteurs = File.listRoots();
JCheckBox bouton ;
bouuton = new JCheckBox(lecteurs[i]);
il n'aime pas du tout car il aurait préféré que ce soit un string.
Quelqu'un pourrait il m'aider à faire fonctionnner ce prog ?

---------------------------------------------------------------------
le pouvoir appartient à ce qui détienne l'information, culture et connaissance pour élargir ton champ vision ....
---------------------------------------------------------------------
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
5 juil. 2004 à 13:05
Rein ne t'empeche de combiner les deux...
tu retorunes une string a la place de l'editor checkbox...
-------------------
>:) dams >:)
-------------------
0
cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004
5 juil. 2004 à 13:22
euh comment on fait ça ?

---------------------------------------------------------------------
le pouvoir appartient à ce qui détienne l'information, culture et connaissance pour élargir ton champ vision ....
---------------------------------------------------------------------
0
cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004
5 juil. 2004 à 13:24
si je fais comme t'as dit je pourrais tjrs afficher mes checkbox ?

----------------------------------------------------------------------
le pouvoir appartient à ce qui détienne l'information, culture et connaissance pour élargir ton champ vision ....
----------------------------------------------------------------------
0
dmaillet Messages postés 500 Date d'inscription mercredi 20 août 2003 Statut Membre Dernière intervention 11 juillet 2007
5 juil. 2004 à 14:01
tiens regarde ca, j'ai un peu modifier l'exemple:
package explorateur;

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

import java.util.*;

public class CheckBoxTree {
public static void main(String[] arg) {
JFrame arboCheck = new FenetreTree();
arboCheck.setVisible(true);
}
}

class FenetreTree
extends JFrame {

FenetreTree() {
super("CBTree");
setSize(800, 600);

JTree arbo;
DefaultMutableTreeNode noeudParent;
DefaultMutableTreeNode noeudEnfant;
DefaultTreeCellRenderer dtcr = new DefaultTreeCellRenderer();
String[] tableau = {
"1", "2", "3", "4", "5"};

noeudParent = new DefaultMutableTreeNode("Datas");
JCheckBox jcb = null;
for (int i = 0; i < tableau.length; i++) {
jcb = new JCheckBox(tableau[i]);
jcb.setBackground(Color.white);
noeudEnfant = new DefaultMutableTreeNode(jcb, true);
noeudParent.add(noeudEnfant);
}

arbo = new JTree(noeudParent);
RenduComposant rc = new RenduComposant();
EditComposant ec = new EditComposant();
arbo.setCellRenderer(rc);
arbo.setCellEditor(ec);
arbo.setEditable(true);
getContentPane().add(new JScrollPane(arbo));
}
}

class RenduComposant
extends DefaultTreeCellRenderer {

public Component getTreeCellRendererComponent(JTree tree, Object obj,
boolean selected,
boolean expanded, boolean leaf,
int row, boolean hasFocus) {
super.getTreeCellRendererComponent(
tree, obj, selected,
expanded, leaf, row,
hasFocus);
DefaultMutableTreeNode dmtcr = (DefaultMutableTreeNode) obj;
try{
return (JCheckBox) dmtcr.getUserObject();
}
catch(Exception e){
return this;
}
}
}

class EditComposant
implements TreeCellEditor {

public void addCellEditorListener(CellEditorListener l) {}

public void cancelCellEditing() {}

public Object getCellEditorValue() {
return this;
}

public boolean isCellEditable(EventObject evt) {
if (evt instanceof MouseEvent) {
MouseEvent mevt = (MouseEvent) evt;
if (mevt.getClickCount() == 1) {
return true;
}
}
return false;
}

public void removeCellEditorListener(CellEditorListener l) {}

public boolean shouldSelectCell(EventObject anEvent) {
return true;
}

public boolean stopCellEditing() {
return false;
}

public Component getTreeCellEditorComponent(JTree tree, Object obj,
boolean selected,
boolean expanded, boolean leaf,
int row) {
// super.getTreeCellEditorComponent(
// tree, obj, selected,
// expanded, leaf, row);
final JTree jtree = tree;
final DefaultMutableTreeNode dmtcr = (DefaultMutableTreeNode) obj;
try {
return (JCheckBox) dmtcr.getUserObject();
}
catch (Exception e) {
//un label avec une icon (mettre la bonne, car la methode ne retourne pas forcement la bonne)
JLabel label = new JLabel((String)dmtcr.getUserObject());
label.setIcon(((DefaultTreeCellRenderer)jtree.getCellRenderer()).getIcon());
return label;
//ou juste un label
// return new JLabel((String)dmtcr.getUserObject());
//ou alors si tu la veux editable:
// final JTextField textEditor = new JTextField(dmtcr.toString());
// textEditor.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent ae){
// dmtcr.setUserObject(textEditor.getText());
// jtree.setSelectionPath(new TreePath(dmtcr.getFirstChild()));
// }
// });
// textEditor.addKeyListener(new KeyListener(){
// public void keyPressed(KeyEvent ke){
// if (ke.getKeyCode()==KeyEvent.VK_ENTER){
// dmtcr.setUserObject(textEditor.getText());
// jtree.setSelectionPath(new TreePath(dmtcr.getFirstChild()));
// }
// }
// public void keyReleased(KeyEvent ke){}
// public void keyTyped(KeyEvent ke){}
// });
// return textEditor;
}
}
}

-------------------
>:) dams >:)
-------------------
0
cs_lorenzo972 Messages postés 28 Date d'inscription mercredi 30 juin 2004 Statut Membre Dernière intervention 24 août 2004
5 juil. 2004 à 14:37
Merci, c'est sympa ça me permets de bien avancer.
Mais en fait moi je ne peux pas mettre ma liste des disques durs dans un tableau de string comme toi tu y rentres les chiffres en dur.
moi je suis obligé de faire:
lecteurs = File.listRoots;
et avec ça je ne peux pas faire :
JChexkBox jcb = new JCheckBox(lecteurs[i]);
ça souligne le new et je ne comprends pas pourkoi?

ça me dit qu'il y a un prob pour la construction

---------------------------------------------------------------------
le pouvoir appartient à ce qui détienne l'information, culture et connaissance pour élargir ton champ vision ....
----------------------------------------------------------------------
0
Rejoignez-nous