2008-08-28 9 views

Respuesta

10

Probablemente pueda hacer esto configurando su propio FileSystemView.

+0

¿cómo se consigue la filesystemview por defecto (por ejemplo, delegar en ella)? –

+1

@Jason S - probablemente a través del método estático 'getFileSystemView()' – McDowell

+0

Solo si alguien pudiera necesitarlo, aquí hay un ejemplo exacto de lo que OP quería: http://tips4java.wordpress.com/2009/01/28/single -root-file-chooser/ –

20

En caso que nadie más lo necesita en el 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; 
    } 
} 

Obviamente va necesitan hacer un mejor método "createNewFolder", pero esto no restringir al usuario a uno o más directorios.

y utilizarlo como esto:

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File("X:\\")); 
JFileChooser fileChooser = new JFileChooser(fsv); 

o como esto:

FileSystemView fsv = new DirectoryRestrictedFileSystemView(new File[] { 
    new File("X:\\"), 
    new File("Y:\\") 
}); 
JFileChooser fileChooser = new JFileChooser(fsv); 
+0

No funciona @Allain –

5

La solución de Allain es casi completa. Tres problemas están abiertas para resolver:

  1. hacer clic en el "Inicio" -Button manda el usuario fuera de las restricciones
  2. DirectoryRestrictedFileSystemView no es accesible fuera del paquete
  3. punto de partida no es root

  1. Anexar @ Override a DirectoryRestrictedFileSystemView

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

  1. clase set y constructor public

  2. Cambio JFileChooser fileChooser = new JFileChooser(fsv); en JFileChooser fileChooser = new JFileChooser(fsv.getHomeDirectory(),fsv);

lo uso para restringir a los usuarios a permanecer en un archivo zip a través de TrueZips TFileChooser y con ligeras modificaciones al código anterior, esto funciona perfectamente. Muchas gracias.

-1

No es necesario que sea tan complicado. Puede configurar fácilmente el modo de selección de un JFileChooser como esto

JFileChooser fc = new JFileChooser(); 
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
fc.setMultiSelectionEnabled(false); 

Puede leer más aquí referencia How to Use File Choosers

+1

Esto los limita a los directorios en general, pero no a un directorio específico, que es la pregunta del OP. –

Cuestiones relacionadas