IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

JFileChooser et FileSystemView


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1
    Par défaut JFileChooser et FileSystemView
    Bonjour,

    Je souhaite utiliser un JFileChooser dans mon application afin de limiter l'accès des utilisateurs à certaines sous-parties de l'arboresence disque.
    Pour ce faire, j'ai fait mon propre FileSystemView à partie de codes trouvés sur internet.
    Cependant, il me semble qu'aucune des méthodes de mon FileSystemView ne soit appelée notament getRoots(), isRoot() et d'autres fonctions qui permettent justement de décrire le comportment voulu.
    Je vous joins le code source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    import java.io.File;
    import java.io.IOException;
    import javax.swing.Icon;
    import javax.swing.JFileChooser;
    import javax.swing.filechooser.FileSystemView;
     
    public class MultiRootedFileSytemView extends FileSystemView {
     
        private final File[] fsRoots;
        private final File homeFile;
        private final FileSystemView system = FileSystemView.getFileSystemView();
     
        private MultiRootedFileSytemView(File home, File[] roots) {
            this.fsRoots = roots;
            this.homeFile = home;
        }
     
        public static JFileChooser createFileChooser(final File home, final File[] roots) {
            if (!home.isDirectory()) {
                throw new IllegalArgumentException("root must be a directory");
            }
     
            JFileChooser fc = new JFileChooser(home, new MultiRootedFileSytemView(home, roots));
            fc.setAcceptAllFileFilterUsed(false);
            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            return fc;
        }
     
        @Override
        public File getHomeDirectory() {
            System.out.println("On récupère le home");
            return homeFile;
        }
     
        @Override
        public File[] getRoots() {
            System.out.println("oN RECUPERE LES ROOTS");
            return fsRoots;
        }
     
     
     
        @Override
        public boolean isRoot(File file) {
            System.out.println("On commence a regarder les filesystems root");
            for (File rootFile : fsRoots) {
                if (rootFile.getName().equals(file.getName())) {
                    System.out.println(file + " est une racine (isRoot)");
                    return true;
                }
            }
            return false;
        }
     
        @Override
        public boolean isFileSystemRoot(File file) {
            System.out.println("On commence a regarder les filesystems root");
            for (File rootFile : fsRoots) {
                if (rootFile.getName().equals(file.getName())) {
                    System.out.println(file + " est une racine (isFileSystemRoot)");
                    return true;
                }
            }
            return false;
        }
     
        @Override
        public File getDefaultDirectory() {
            return this.homeFile;
        }
     
        @Override
        public File getParentDirectory(File dir) {
            if (isRoot(dir)) {
                return dir;
            }
            return super.getParentDirectory(dir);
        }
     
        @Override
        public File createFileObject(String path) {
            File file = new File(this.homeFile, path);
            if (file.exists()) {
                return file;
            }
            return this.homeFile;
        }
     
        @Override
        protected File createFileSystemRoot(File f) {
            return null;
        }
     
        @Override
        public File createFileObject(File dir, String filename) {
            return system.createFileObject(dir, filename);
        }
     
        @Override
        public File createNewFolder(File containingDir) throws IOException {
            return system.createNewFolder(containingDir);
        }
     
        @Override
        public File getChild(File parent, String fileName) {
            return system.getChild(parent, fileName);
        }
     
        @Override
        public File[] getFiles(File dir, boolean useFileHiding) {
            return system.getFiles(dir, useFileHiding);
        }
     
        @Override
        public String getSystemDisplayName(File f) {
            return system.getSystemDisplayName(f);
        }
     
        @Override
        public Icon getSystemIcon(File f) {
            return system.getSystemIcon(f);
        }
     
        @Override
        public String getSystemTypeDescription(File f) {
            return system.getSystemTypeDescription(f);
        }
     
        @Override
        public boolean isComputerNode(File dir) {
            return system.isComputerNode(dir);
        }
     
        @Override
        public boolean isDrive(File dir) {
            return system.isDrive(dir);
        }
     
        @Override
        public boolean isFileSystem(File f) {
            return system.isFileSystem(f);
        }
     
        @Override
        public boolean isFloppyDrive(File dir) {
            return system.isFloppyDrive(dir);
        }
     
        @Override
        public boolean isHiddenFile(File f) {
            return system.isHiddenFile(f);
        }
     
        @Override
        public boolean isParent(File folder, File file) {
            return system.isParent(folder, file);
        }
     
        @Override
        public Boolean isTraversable(File f) {
            return system.isTraversable(f);
        }
    }

    Et le code appellant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     JFileChooser fc = MultiRootedFileSytemView.createFileChooser(destDirectory, getWritableFileSystemRoots());
    fc.showOpenDialog(this);
    La fenetre de dialogue apparait bien.
    Le JFileChooser est bien placé dans le bon répertoire.

    MAIS :
    - l'utilisateur a la possibilité de remonter au dela des racines définies dans le fileSystemView
    - La listbox qui présente l'arboresence actuel montre le path complet jusqu'a la racine ("/") et permet aussi de remonter l'arboresence.
    - Les methodes du FileSystemView ne sont jamais appellées.
    - Je ne vois nul part sur le composant graphique la mention des autres racines passées au filesystemview.

    J'utilise la jdk 1.6 de sun et je suis sous linux.

    J'ai aussi essayé avec un FileSystemView avec une seule racine, mais ca ne fonctionne pas mieux.

    Si vous avez quelques idées ou besoin d'informations supplémentaires, je suis preneur !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Par défaut
    Bonjour,

    voici un exemple qui te permet de te placer dans un répertoire, de désactiver les différents composant de navigation de ton fileChooser, et de faire un tri dans les extensions de fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    /**
         * Fonction qui permet d'ouvrir un explorateur de fichier
         * avec des extensions précise et un répertoire prédéfinie.
         *
         * @param extension Tableau des extensions autorisées.
         * @param description Description des extensions.
         * @param dossier Répertoire d'ouverture de l'explorateur
         * de fichier.
         * @param contrainte Permet d'accepter un fichier dont
         * l'extension ne figure pas dans le tableau si il est
         * à false. Sinon n'accepte que les fichiers du tableau
         * d'extension.
         * @param desactiveBouton Permet de désactiver les boutons de navigations
         * de l'explorer de fichier
         * @param fullPath Permet de retourner le chemin complet du fichier à la place
         * de son nom.
         * @return Le fichier sélectionné.
         */
        public static String demandeOuvrirFichier(String[] extension, String description,
                File dossier, boolean contrainte, boolean desactiveBouton, boolean fullPath) {
     
     
            JFileChooser chooser = new JFileChooser();
            FiltreFichier filtre = null;
            //ChoixFichier filter = new ChoixFichier(".SADT", "CANALYSE SADT");
            chooser.setDialogType(JFileChooser.OPEN_DIALOG);
            //chooser.addChoosableFileFilter(filter);
     
            if( desactiveBouton ){
                //desactivation des boutons de navigations et du comboBox.
                DisableButton(chooser);
            }
     
            if (extension != null && extension.length > 0) {
     
                //mise en place des filtres de fichiers
                filtre = new FiltreFichier(extension);
                filtre.setDescription(description);
                chooser.setFileFilter(filtre);
            }
     
            if (dossier != null) {
                //positionnement du fileChooser dans le bon répertoire.
                chooser.setCurrentDirectory(dossier);
            }
     
            int retval = chooser.showDialog(new JFrame(), null);
            while (retval == JFileChooser.APPROVE_OPTION) {
                File theFile = chooser.getSelectedFile();
                if (theFile != null) {
                    if (theFile.exists()) {
                        if ((filtre != null && contrainte) ? filtre.accept(theFile) : true) {
     
                            if( fullPath ){
                                LeFichier = theFile.getPath();
                            }else {
                                LeFichier = theFile.getName();
                            }
                            return LeFichier;
                        } else {
                            int reponse = JOptionPane.showConfirmDialog(new JFrame(),
                                    "Vous ne pouvez pas ouvrir ce fichier." +
                                    "Voulez vous essayer d'en ouvrir un autre ?", "Erreur de sélection de fichier",
                                    JOptionPane.YES_NO_OPTION);
     
                            if (reponse == JOptionPane.NO_OPTION) {
                                return "";
                            }
                        }
                    } else {
     
                        int reponse = JOptionPane.showConfirmDialog(new JFrame(),
                                "Le Fichier n'existe pas. Voulez-vous essayer " +
                                "d'en ouvrir un autre", "Erreur de lecture du fichier",
                                JOptionPane.YES_NO_OPTION);
     
                        if (reponse == JOptionPane.NO_OPTION) {
                            return "";
                        }
                    }
                }
                retval = chooser.showDialog(null, null);
            }
            return "";
        }
     
        private static void DisableButton(Container c) {
     
            //nombre de composent dans le container
            int len = c.getComponentCount();
     
            for (int i = 0; i < len; i++) {
                Component comp = c.getComponent(i);
     
                if (comp instanceof JButton) {
                    JButton b = (JButton) comp;
     
                    if( b.getText() == null || b.getText().equals("")){
                        b.setEnabled(false);
                    }
     
                } else if (comp instanceof JComboBox) {
     
                    JComboBox cb = (JComboBox) comp;
     
                    cb.setEnabled(false);
     
                } else if (comp instanceof Container) {
                    DisableButton((Container) comp);
                }
            }
        }
    En espérant que cela puisse t'aider.

Discussions similaires

  1. [JFileChooser] sélectionner un dossier
    Par hunter dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 20/05/2011, 18h23
  2. [débutant] [JFileChooser] Récupérer le nom du fichier
    Par pingoui dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 14/08/2004, 15h41
  3. Titre d'un jfilechooser
    Par Guybrush dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 16/07/2004, 17h38
  4. [JFileChooser] choisir un dossier
    Par xavlours dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 14/07/2004, 18h40
  5. Couleur du fontChooser, jFileChooser, etc...
    Par tahiti bob dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 03/03/2004, 01h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo