Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > AWT/SWING
AWT/SWING
Forum d'entraide pour les API Swing et AWT. Avant de poster -> FAQ AWT/SWING
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/09/2007, 15h51   #1
Teocali
Membre confirmé
 
Inscription : novembre 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : novembre 2004
Messages : 124
Points : 274
Points : 274
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
Teocali est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 15h55   #2
fnobb
Membre chevronné
 
Inscription : avril 2003
Messages : 776
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 776
Points : 786
Points : 786
Bonjour,

pour filtrer l'affichage d'un JFileChooser il y a FileFilter
fnobb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 16h17   #3
Teocali
Membre confirmé
 
Inscription : novembre 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : novembre 2004
Messages : 124
Points : 274
Points : 274
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
Teocali est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 16h25   #4
fnobb
Membre chevronné
 
Inscription : avril 2003
Messages : 776
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 776
Points : 786
Points : 786
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"
fnobb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 16h38   #5
Teocali
Membre confirmé
 
Inscription : novembre 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : novembre 2004
Messages : 124
Points : 274
Points : 274
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
Teocali est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 16h54   #6
fnobb
Membre chevronné
 
Inscription : avril 2003
Messages : 776
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 776
Points : 786
Points : 786
Ben c'est pareil de "c:" il ne peut voir que le répertoire "foo"
fnobb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 17h46   #7
adiGuba
Expert Confirmé Sénior
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 657
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

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

Informations forums :
Inscription : avril 2002
Messages : 12 657
Points : 22 435
Points : 22 435
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 :
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 :
1
2
	JFileChooser chooser = MyFileSystemView.createFileChooser(new File("ton rep de base"));
	chooser.showOpenDialog(null);

Ca devrait marcher correctement...

a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 10h52   #8
Teocali
Membre confirmé
 
Inscription : novembre 2004
Messages : 124
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : novembre 2004
Messages : 124
Points : 274
Points : 274
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
Teocali est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 23h52   #9
mimokatana
Invité régulier
 
Inscription : juillet 2005
Messages : 34
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 34
Points : 9
Points : 9
bonjour,
mais est-ce qu'il y a un moyen de cacher "certaines" dossiers dans cette arborescence???


Merci pour toute réponse.
mimokatana est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h38.


 
 
 
 
Partenaires

Hébergement Web