Je souhaite limiter mes utilisateurs à un répertoire et ses sous-répertoires, mais le bouton "Parent Directory" leur permet de naviguer vers un répertoire arbitraire.Comment limiter JFileChooser à un répertoire?
Comment devrais-je faire cela?
Je souhaite limiter mes utilisateurs à un répertoire et ses sous-répertoires, mais le bouton "Parent Directory" leur permet de naviguer vers un répertoire arbitraire.Comment limiter JFileChooser à un répertoire?
Comment devrais-je faire cela?
Vous pouvez probablement le faire en définissant le vôtre FileSystemView.
Incase quelqu'un d'autre a besoin à l'avenir:
class DirectoryRestrictedFileSystemView extends FileSystemView
{
private final File[] rootDirectories;
DirectoryRestrictedFileSystemView(File rootDirectory)
{
this.rootDirectories = new File[] {rootDirectory};
}
DirectoryRestrictedFileSystemView(File[] rootDirectories)
{
this.rootDirectories = rootDirectories;
}
@Override
public File createNewFolder(File containingDir) throws IOException
{
throw new UnsupportedOperationException("Unable to create directory");
}
@Override
public File[] getRoots()
{
return rootDirectories;
}
@Override
public boolean isRoot(File file)
{
for (File root : rootDirectories) {
if (root.equals(file)) {
return true;
}
}
return false;
}
}
Vous aurez besoin évidemment de faire une meilleure méthode « createNewFolder », mais cela ne restreint l'utilisateur à l'un des plusieurs répertoires.
Et l'utiliser comme ceci:
FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\"));
JFileChooser fileChooser = new JFileChooser(fsv);
ou comme ceci:
FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File[] {
new File("X:\\"),
new File("Y:\\")
});
JFileChooser fileChooser = new JFileChooser(fsv);
Ne fonctionne pas @Allain –
La solution de Allain est presque complète. Trois problèmes sont ouverts à résoudre:
public TFile getHomeDirectory() { return rootDirectories[0]; }
classe ensemble et constructeur public
changement JFileChooser fileChooser = new JFileChooser(fsv);
dans JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);
Je l'utilise pour restreindre les utilisateurs de rester dans un fichier zip via TrueZips TFileChooser et avec de légères modifications au code ci-dessus, cela fonctionne parfaitement. Merci beaucoup.
Pas besoin d'être si compliqué. Vous pouvez facilement définir le mode de sélection d'un JFileChooser comme celui-ci
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
Vous pouvez en lire plus ici référence How to Use File Choosers
Cela les limite aux répertoires en général, mais pas à un répertoire spécifique, qui est la question de l'OP. –
comment obtenez-vous la filesystemview par défaut (par exemple de lui déléguer)? –
@Jason S - probablement via la méthode statique 'getFileSystemView()' – McDowell
Juste si quelqu'un pourrait en avoir besoin, voici un exemple exact de ce que OP voulait: http://tips4java.wordpress.com/2009/01/28/single -root-file-chooser/ –