2008-08-28 8 views

Répondre

10

Vous pouvez probablement le faire en définissant le vôtre FileSystemView.

+0

comment obtenez-vous la filesystemview par défaut (par exemple de lui déléguer)? –

+1

@Jason S - probablement via la méthode statique 'getFileSystemView()' – McDowell

+0

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/ –

20

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); 
+0

Ne fonctionne pas @Allain –

5

La solution de Allain est presque complète. Trois problèmes sont ouverts à résoudre:

  1. En cliquant sur le "Home" -Button kicks l'utilisateur sur des restrictions
  2. DirectoryRestrictedFileSystemView n'est pas accessible en dehors du package
  3. point de départ est pas root

  1. Ajouter @Override à DirectoryRestrictedFileSystemView

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

  1. classe ensemble et constructeur public

  2. 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.

-1

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

+1

Cela les limite aux répertoires en général, mais pas à un répertoire spécifique, qui est la question de l'OP. –

Questions connexes