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

AWT/Swing Java Discussion :

[JFileChooser] Limiter la navigation dans une arborescence précise


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 129
    Points : 336
    Points
    336
    Par défaut [JFileChooser] Limiter la navigation dans une arborescence précise
    Bonjour les gens,

    En fait, j'aimerais ouvrir un JFileChooser dans un répertoire précis (jusque là, pas de problème) mais j'aimerais également que les répertoires et les fichiers qui ne soient pas contenu dans ce répertoire ou un de ses sous-répertoires ne soient pas accessible.

    En gros, si j'affiche mon JFileChooser avec comme répertoire par défaut "C:\foo\fighter" , l'utilisateur puisse acceder aux fichier et aux sous répertoires enfant, tel que le fichier "C:\foo\fighter\torpille.png", mais ne puisse pas acceder aux répertoires "C:\foo", "C:\tata" ou bien encore "D:\".

    Voila, je sais pas si je suis très clair, donc si vous voulez des précision supplémentaires, n'hésitez pas à me les demander.

    Dans l'attente de vos réponses,
    Cordialement,

    Teocali

  2. #2
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Bonjour,

    pour filtrer l'affichage d'un JFileChooser il y a FileFilter

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 129
    Points : 336
    Points
    336
    Par défaut
    Mais dans le cas présent, je ne suis pas sur qu'il convienne. En effet, un File Filter permet de cacher des fichiers répondant à certaines contraintes, mais je ne crois pas qu'il empêche de remonter dans un répertoire parent via les outils de navigation du File Chooser (la combo box donnant l'arborescence, le bouton qui permet de remonter d'un cran dans l'arborescence, la bar de boutons sur la gauche du dialog, etc.).

    Je précise que je ne suis pas contraint a JFileChooser. Si vous connaissez un autre composant qui me permet de faire ce que j'ai besoin de faire, je sauterais dessus

    Teocali

  4. #4
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Rien de l'empeche de remonter d'un repertoire.
    il ne vera que le répertoire "fighter" s'il va dans le repertoire "c:\foo"

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 129
    Points : 336
    Points
    336
    Par défaut
    Mouais, éventuellement, ça reste un pis-aller, mais c'est pas propre. Ca risque de bloquer s'il remonter, par exemple, dans C:\, mais je peux faire en sorte qu'il ne puisse accéder qu'aux fichiers de l'arborescence souhaitée.
    Je vais m'orienter vers cette solution, mais si quelqu'un d'autre en voit une "plus propre", qu'il ne se gène pas pour se faire connaitre.

    Merci quand même, fnobb

    Teocali

  6. #6
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Ben c'est pareil de "c:" il ne peut voir que le répertoire "foo"

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    En utilisant un FileSystemView perso tu peux cacher toute une partie du système de fichier.
    Par exemple pour utiliser un répertorie comme racine du système 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
    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
    public class MyFileSystemView extends FileSystemView {
     
    	/** Le FileSystemView par défaut */
    	private final FileSystemView system = FileSystemView.getFileSystemView();
    	/** Le répertoire de base */
    	private final File root;
     
    	/** Constructeur privé */
    	private MyFileSystemView(File root) {
    		// On récupère le chemin canonique du répertoire
    		this.root = root;
    	}
     
    	/** Factory publique */
    	public static JFileChooser createFileChooser(File root) throws IOException {
    		root = root.getCanonicalFile(); // On récupère le chemin canonique
    		if (!root.isDirectory()) {
    			throw new IllegalArgumentException("root must be a directory");
    		}
    		return new JFileChooser(root, new MyFileSystemView(root));
    	}
     
    	@Override
    	public boolean isRoot(File f) {
    		return this.root.equals(f.getAbsoluteFile());
    	}
     
    	@Override
    	public boolean isFileSystemRoot(File dir) {
    		return this.root.equals(dir.getAbsoluteFile());
    	}
     
    	@Override
    	public File[] getRoots() {
    		return new File[] { this.root.getAbsoluteFile() };
    	}
     
    	@Override
    	public File getHomeDirectory() {
    		return this.root.getAbsoluteFile();
    	}
     
    	@Override
    	public File getDefaultDirectory() {
    		return this.root.getAbsoluteFile();
    	}
     
     
    	@Override
    	public File getParentDirectory(File dir) {
    		if(isRoot(dir)) {
    			// Pas de parent director pour le répertoire root :
    			return this.root;
    		}
    		return system.getParentDirectory(dir);
    	}
     
     
    	@Override
    	public File createFileObject(String path) {
    		// Fichier crée lorsqu'on tape le nom directement :
    		// On crée le fichier selon le répertoire root :
    		File file = new File(this.root, path);
    		if (file.exists()) {
    			return file;
    		}
    		// S'il n'existe pas on renvoi root
    		return this.root;
    	}
     
     
    	@Override
    	protected File createFileSystemRoot(File f) {
    		return null;
    	}
     
     
     
    	// Pour tous les autres on se contente d'appeler le FileSystemView par défaut :
     
     
     
    	@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);
    	}
    }
    Ce qui s'utilise comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	JFileChooser chooser = MyFileSystemView.createFileChooser(new File("ton rep de base"));
    	chooser.showOpenDialog(null);

    Ca devrait marcher correctement...

    a++

  8. #8
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 129
    Points : 336
    Points
    336
    Par défaut
    J'aurais du me douter que la solution se trouvait du coté de FileSystem, mais j'aurais jamais pensé à en créer un nouveau. Je teste, et j'edite si ça marche. Merci beaucoup

    EDIT : Ça marche Nickel !!! Merci encore

    Teocali, joie

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    bonjour,
    mais est-ce qu'il y a un moyen de cacher "certaines" dossiers dans cette arborescence???


    Merci pour toute réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JFileChooser] Limiter la navigation dans une arborescence précise
    Par Dark_TeToN dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 28/07/2014, 11h07
  2. Repérer un dossier dans une arborescence
    Par Feustine dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2005, 13h54
  3. Pb d'Ajout un noeud fils dans une arborescence
    Par oramine dans le forum Oracle
    Réponses: 5
    Dernier message: 21/12/2004, 15h39
  4. navigation dans une jsp avec javascript
    Par petitelulu dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/11/2004, 18h55
  5. Suppression d'item dans une arborescence
    Par jonzuzu dans le forum MFC
    Réponses: 2
    Dernier message: 24/02/2004, 17h45

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