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?

War es hilfreich?

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:

  1. Durch Klicken auf den „Home“-Button wird der Benutzer aus den Einschränkungen entlassen
  2. Auf DirectoryRestrictedFileSystemView kann außerhalb des Pakets nicht zugegriffen werden
  3. Ausgangspunkt ist nicht Root

  1. Hängen Sie @Override an DirectoryRestrictedFileSystemView an

public TFile getHomeDirectory() { return rootDirectories[0]; }

  1. Klasse und Konstruktor festlegen public

  2. Ändern JFileChooser fileChooser = new JFileChooser(fsv); hinein JFileChooser 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top