Wie beschränke ich JFileChooser auf ein Verzeichnis?
-
09-06-2019 - |
Frage
Ich möchte meine Benutzer auf ein Verzeichnis und seine Unterverzeichnisse beschränken, aber über die Schaltfläche „Übergeordnetes Verzeichnis“ können sie zu einem beliebigen Verzeichnis navigieren.
Wie soll ich das machen?
Lösung
Sie können dies wahrscheinlich tun, indem Sie Ihre eigenen festlegen FileSystemView.
Andere Tipps
Falls das in Zukunft noch jemand braucht:
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;
}
}
Sie müssen natürlich eine bessere Methode „createNewFolder“ erstellen, aber dadurch wird der Benutzer auf eines oder mehrere Verzeichnisse beschränkt.
Und verwenden Sie es so:
FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\"));
JFileChooser fileChooser = new JFileChooser(fsv);
oder so:
FileSystemView fsv = new DirectoryRestrictedFileSystemView( new File[] {
new File("X:\\"),
new File("Y:\\")
});
JFileChooser fileChooser = new JFileChooser(fsv);
Die Lösung von Allain ist fast vollständig.Drei Probleme können gelöst werden:
- Durch Klicken auf den „Home“-Button wird der Benutzer aus den Einschränkungen entlassen
- Auf DirectoryRestrictedFileSystemView kann außerhalb des Pakets nicht zugegriffen werden
- Ausgangspunkt ist nicht Root
- Hängen Sie @Override an DirectoryRestrictedFileSystemView an
public TFile getHomeDirectory()
{
return rootDirectories[0];
}
Klasse und Konstruktor festlegen
public
Ändern
JFileChooser fileChooser = new JFileChooser(fsv);
hineinJFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);
Ich verwende es, um Benutzer daran zu hindern, über TrueZips TFileChooser in einer ZIP-Datei zu bleiben, und mit geringfügigen Änderungen am obigen Code funktioniert dies perfekt.Vielen Dank.
Das muss nicht so kompliziert sein.Sie können den Auswahlmodus eines JFileChooser ganz einfach auf diese Weise festlegen
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fc.setMultiSelectionEnabled(false);
Weitere Referenzen können Sie hier lesen So verwenden Sie die Dateiauswahl