JFileChooser

De ChuWiki

Uso básico del JFileChooser[editar]

JFileChooser es una clase java que nos permite mostrar fácilmente una ventana para la selección de un fichero.

Si queremos abrirlo para leer el fichero, podemos llamarlo así

JFileChooser fileChooser = new JFileChooser();
int seleccion = fileChooser.showOpenDialog(areaTexto);

areaTexto es cualquier componente java de alguna de nuestras ventanas, la que queramos que haga de ventana padre del diálogo JFileChooser. Nuestro diálogo JFileChooser no se podrá ir detrás de su ventana padre.

La llamada showOpenDialog() se quedará bloqueada hasta que el usuario elija un fichero y cierre la ventana. A la vuelta, en selección tendremos

  • JFileChooser.CANCEL_OPTION Si el usuario le ha dado al botón cancelar.
  • JFileChooser.APPROVE_OPTION Si el usuario le ha dado al botón aceptar
  • JFileChooser.ERROR_OPTION Si ha ocurrido algún error.

Comprobando que se ha dado al botón aceptar, podemos obtener el fichero seleccionado por el usuario así

if (seleccion == JFileChooser.APROVE_OPTION)
{
   File fichero = fileChooser.getSelectedFile();
   // Aquí debemos abrir y leer el fichero.
   ...
}

Para seleccionar un fichero para guardar datos, el mecanismo es igual, pero se llama al método showSaveDialog()

JFileChooser fileChooser = new JFileChooser();
int seleccion = fileChooser.showSaveDialog(areaTexto);
if (seleccion == JFileChooser.APPROVE_OPTION)
{
   File fichero = fileChooser.getSelectedFile();
   // Aquí debemos abrir el fichero para escritura
   // y salvar nuestros datos.
   ...
}

La única diferencia entre uno y otro es la etiqueta del diálogo y de los botones. Uno pondrá "Abrir" y otro "Guardar"

Algo de configuración[editar]

Directorio inicial[editar]

El JFileChooser se abre por defecto en el directorio HOME del usuario (C:\Documents and Settings\usuario en Windows, /home/usuario en linux). Podemos elegir el directorio en el que queremos que se abra llamando al método setCurrentDirectory() pasando el directorio en cuestión.

Seleccionar directorios[editar]

Por defecto, un JFileChooser sólo permite elegir ficheros. Si queremos que permita elegir también directorios, debemos llamar a setFileSelectionMode(), pasando como parámetro uno de las siguientes constantes

  • JFileChooser.FILES_ONLY
  • JFileChooser.DIRECTORIES_ONLY
  • JFileChooser.FILES_AND_DIRECTORIES

Filtrar los ficheros visibles[editar]

Si no queremos que el JFileChooser muestre todos los ficheros del directorio, podemos añadirle un filtro. Básicamente hay que hacer una clase que herede de FileFilter y definir el método accept(). Este método recibe un parémetro File y nosotros debemos decidir si pasa o no el filtro, devolviendo true o false. Por ejemplo, si sólo queremos ver fichero .jpg, podemos hacer este filtro

import javax.swing.filechooser.FileFilter;
...
public class FiltroDeJPG extends FileFilter
{
   public boolean accept (File fichero)
   {
      if (tieneExtensionJPG (fichero))
         return true;
      else
         return false;
   }
   public String getDescription()
   {
      return ("Filtro JPGs");
   }
}

Debemos definir ambos métodos. La descripción puede ser cualquier cadena de texto que nos sirva como descripción del filtro. Finalmente, debemos pasar este filtro al JFileChooser

fileChooser.setFilter(new FiltroDeJPG());


Sin embargo, una de las bondades ofrecidas por el JDK 1.6, es el ahorro en la codificación de una clase filtro, pues este, ya viene con una incluida a la cual solo necesitamos invocarla, la sintaxis es la siguiente:

JFileChooser jf = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF", "jpg", "gif");
jf.setFilter(filter);

Donde el primer termino es la descripción (el texto que más nos guste, o incluso null) y los siguientes serían las extensiones de los tipos de archivos aceptados.