Come faccio a limitare JFileChooser di una directory?
-
09-06-2019 - |
Domanda
Voglio limitare la mia utenti di una cartella e le sue sottocartelle, ma il "Parent Directory" pulsante permette di passare a una directory arbitraria.
Come devo procedere?
Soluzione
Probabilmente si può fare impostando il proprio FileSystemView.
Altri suggerimenti
In caso di chiunque altro ha bisogno di questo in futuro:
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;
}
}
Avrete ovviamente bisogno di fare meglio "createNewFolder" metodo, ma questo non limita l'accesso dell'utente a uno o più directory.
E di utilizzarlo come questo:
FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\"));
JFileChooser fileChooser = new JFileChooser(fsv);
o come questa:
FileSystemView fsv = new DirectoryRestrictedFileSystemView( new File[] {
new File("X:\\"),
new File("Y:\\")
});
JFileChooser fileChooser = new JFileChooser(fsv);
La soluzione di Allain è quasi completa.Tre problemi che sono aperti a risolvere:
- Cliccando il tasto "Home"Pulsante calci l'utente al di fuori delle restrizioni
- DirectoryRestrictedFileSystemView non è accessibile al di fuori del pacchetto
- Il punto di partenza non è Root
- Aggiungere @Override per DirectoryRestrictedFileSystemView
public TFile getHomeDirectory()
{
return rootDirectories[0];
}
set di classe e di costruttore
public
Cambiare
JFileChooser fileChooser = new JFileChooser(fsv);
inJFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);
Io lo uso per limitare l'accesso agli utenti di rimanere in un file zip via TrueZips TFileChooser e con delle piccole modifiche al codice di cui sopra, questo funziona perfettamente.Grazie mille.
Non c'è bisogno di essere così complicato.Si può facilmente impostare la modalità di selezione di un JFileChooser come questo
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
Si può leggere di più qui riferimento, Come Utilizzare i File di quel che passa il convento