Comment puis-je limiter JFileChooser pour un répertoire?
-
09-06-2019 - |
Question
Je veux à la limite de mes utilisateurs dans un répertoire et ses sous répertoires mais le "Parent Directory" bouton permet d'accéder à un répertoire particulier.
Comment dois-je faire?
La solution
Vous pouvez probablement le faire en mettant votre propre FileSystemView.
Autres conseils
Au cas où quelqu'un d'autre a besoin dans le futur:
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 évidemment besoin de faire un meilleur "createNewFolder" la méthode, mais cela ne limiter l'utilisateur à l'un des plus répertoires.
Et de 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);
La solution de Allain est presque terminée.Trois problèmes sont ouverts à résoudre:
- En cliquant sur le "Home"-Bouton de coups de pied de l'utilisateur de restrictions
- DirectoryRestrictedFileSystemView n'est pas accessible à l'extérieur de l'emballage
- Point de départ n'est pas Racine
- Ajouter @Override pour DirectoryRestrictedFileSystemView
public TFile getHomeDirectory()
{
return rootDirectories[0];
}
ensemble de la classe et un constructeur
public
Changement
JFileChooser fileChooser = new JFileChooser(fsv);
enJFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);
- Je l'utiliser pour restreindre les utilisateurs à 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 compliqué.Vous pouvez facilement définir le mode de sélection d'un JFileChooser comme ceci
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
Vous pouvez lire plus de référence ici Comment Utiliser les Sélecteurs de Fichiers