Tutorial de JFileChooser

¿Cómo Usar FileChooser?

La clase JFileChooser proporciona un UI para elegir un fichero de una lista. Un selector de ficheros es un componente que podemos situar en cualquier lugar del GUI de nuestro programa. Sin embargo, normalmente los programas los muestran en diálogos modales porque las operaciones con ficheros son sensibles a los cambios dentro del programa. La clase JFileChooser hace sencillo traer un diálogo modal que contiene un selector de ficheros.

Los selectores de ficheros se utilizan comúnmente para dos propósitos.

Para presentar una lista de ficheros que pueden ser abiertos por la aplicación.

Para permitir que el usuario seleccione o introduzca el nombre de un fichero a grabar.

Comenzaremos con un dialogo de apertura estándar

import javax.swing.JFileChooser;

public class Ejemplo {

public static void main(String s[]) {

//Creamos selector de apertura

JFileChooser chooser = new JFileChooser();

chooser.setCurrentDirectory(new java.io.File("."));

//Titulo que llevara la ventana

chooser.setDialogTitle("Titulo");

//Elegiremos archivos del directorio

chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

chooser.setAcceptAllFileFilterUsed(false);

//Si seleccionamos algún archivo retornaremos su directorio

if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

System.out.println("Directorio: " + chooser.getCurrentDirectory());

//Si no seleccionamos nada retornaremos No seleccion

} else {

System.out.println("No seleccion ");

}

}

}

Existen tres métodos los cuales retornan lo siguiente:

1. JFileChooser.CANCEL_OPTION, si el usuario hace clic en Cancelar.
2. JFileChooser.APPROVE_OPTION, si el usuario pulsa en OK / Abrir / Guardar
3. JFileChooser.ERROR_OPTION, si el usuario cierra el cuadro de diálogo

El siguiente ejemplo es bastante sencillo para que entiendan lo que hace cada uno

import java.io.File;

import javax.swing.JFileChooser;

public class SeleccionarOpcion{

public static void main(String[] args) {

// Creamos selector de aperture

JFileChooser fileChooser = new JFileChooser(".");

int status = fileChooser.showOpenDialog(null);// Da un entero

// Si apretamos en aceptar ocurrirá esto

if (status == JFileChooser.APPROVE_OPTION) {

File selectedFile = fileChooser.getSelectedFile();

System.out.println(selectedFile.getParent());

// Si apretamos en cancelar o cerramos la ventana ocurrirá esto

} else if (status == JFileChooser.CANCEL_OPTION) {

System.out.println("Cancelar");

}

}

· Filtrar la lista de ficheros

Por defecto, un selector de ficheros muestra todos los ficheros y directorios que detecta. Un programa puede aplicar uno o más filtros de

ficheros a un selector de ficheros para que el selector sólo muestre algunos de ellos. El selector de ficheros llama al método accept del

filtro con cada fichero para determinar si debería ser mostrado. Un filtro de ficheros acepta o rechaza un fichero basándose en algún

criterio como el tipo, el tamaño, el propietario, etc.

JFileChooser soporta tres clases de filtrado. Los filtros se chequean en el orden aquí listado. Por eso un filtro del segundo tipo solo

puede filtrar aquellos ficheros aceptados por el primero, etc.

· Filtrado interno

El filtrado se configura a través de llamadas a métodos específicos de un selector de ficheros. Actualmente el único filtro

interno disponible es para los ficheros ocultos. Se llama a setFileHidingEnabled(true) para desactivar la selección de

ficheros ocultos (como aquellos que empiezan con '.' en sistemas UNIX).

· Filtrado controlado por la aplicación

La aplicación determina los ficheros a mostrar. Se crea una subclase de FileFilter, se ejemplariza, y se utiliza el ejemplar

como un argumento para setFileFilter. El selector de fiheros sólo mostrará los ficheros que acepte el filtro.

· Filtrado seleccionable por el usuario

El GUI selector de ficheros proporciona una lista de filtros de la que el usuario puede elegir uno. Cuando el usuario elige un

filtro, el selector de ficheros muestra sólo aquellos ficheros que acepte el filtro.

 
filechooser.addChoosableFileFilter(new ImageFilter());

El filtro personalizado se implementa en ImageFilter.aImageFilter.java, como una sublcase de FileFilter. La clase ImageFilter implementa el método getDescription para devolver un string y ponerlo en la lista de filtros seleccionables. Como muestra el siguiente código, ImageFilter implementa el método accept para aceptar todos los directorios y cualquier fichero que tenga las extensiones ".jpg", ".jpeg", ".gif", ".tif", or ".tiff".

public boolean accept(File f) {
 
    if (f.isDirectory()) {
        return true;
    }
 
    String s = f.getName();
    int i = s.lastIndexOf('.');
 
    if (i > 0 &&  i <>
        String extension = s.substring(i+1).toLowerCase();
        if (tiff.equals(extension) ||
            tif.equals(extension) ||
            gif.equals(extension) ||
            jpeg.equals(extension) ||
            jpg.equals(extension)) {
                return true;
        } else {
            return false;
        }
    }
 
    return false;
}

Aceptando todos los directorios, este filtro permite al usuario navegar a través del sistema de ficheros. Si se omitieran las líneas en negrita de este método, el usuario se vería limitado al directorio en que se inicializó el selector de ficheros.

El último ejemplo consiste en abrir archivos y los cuales ira mostrando en el cmd

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

public class Test {

public static void main(String[] args) {

// Esto es solo para cambiarle el tema a la ventana

JFrame.setDefaultLookAndFeelDecorated(true);

JDialog.setDefaultLookAndFeelDecorated(true);

// Creamos una ventana

JFrame frame = new JFrame("JComboBox Test");

frame.setLayout(new FlowLayout());

// Acción por defecto al cerrar la ventana: salir del programa

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Creamos un boton

JButton button = new JButton("Selecccionar");

    // Si la clase principal no implementa la interfaz ActionListener
  //se puede asociar el botón con una instancia de ActionListener
    // se ejecutan cuando se detectan acciones sobre el botón 
 

button.addActionListener(new ActionListener() {

  //  Lo que sucede al pulsar el boton

public void actionPerformed(ActionEvent ae) {

//Creamos selector de aperture

JFileChooser fileChooser = new JFileChooser();

int returnValue = fileChooser.showOpenDialog(null);// Nos retorna un entero

// Si apretamos en aceptar un archive ocurrira esto

if (returnValue == JFileChooser.APPROVE_OPTION) {

File selectedFile = fileChooser.getSelectedFile();

System.out.println(selectedFile.getName());

}

}

});

frame.add(button);

frame.pack();

frame.setVisible(true);

}

}

· El API de FileChooser

El API para usar selectores de ficheros se divide en estas gategorías.


Crear y Mostrar un Selector de Ficheros

Método

Propósito

JFileChooser()

JFileChooser(File, FileSystemView)

JFileChooser(File)

JFileChooser(FileSystemView)

JFileChooser(String, FileSystemView)

JFileChooser(String)

Crea un ejemplar de JFileChooser.

int showOpenDialog(Component)

int showSaveDialog(Component)

int showDialog(Component, String)

Muestra un diálogo modal conteniendo el selector de ficheros.

· Navegar por la Lista del Selector de Ficheros

Método

Propósito

JComponent getAccessory()

void setAccessory(JComponent)

Selecciona u obtiene el accesorio del selector de ficheros.

void setFileFilter(FileFilter)

FileFilter getFileFilter()

Selecciona u obtiene el filtro primario del selector de ficheros.

void setFileView(FileView)

FileView getFileView()

Selecciona u obtiene el visor de ficheros del selector.

FileFilter[] getChoosableFileFilters()

void setChoosableFileFilters(FileFilter[])

void addChoosableFileFilter(FileFilter)

boolean removeChoosableFileFilter(FileFilter)

void resetChoosable(FileFilter)

FileFilter getAcceptAllFileFilter()

Selecciona, obtiene o modifica la lista de filtros seleccionables.

void setFileHidingEnabled(boolean)

boolean isFileHidingEnabled()

Selecciona u obtiene si se muestran los ficheros ocultos.

· Seleccionar Ficheros y Directorios

Método

Propósito

void setFileSelectionMode(int)

int getFileSelectionMode()

boolean

isDirectorySelectionEnabled()

boolean isFileSelectionEnabled()

Selecciona el modo de selección de ficheros. Los valores aceptables son

FILES_ONLY, DIRECTORIES_ONLY, y FILES_AND_DIRECTORIES.

void

setMultiSelectionEnabled(boolean)

boolean isMultiSelectionEnabled()

Selecciona u obtiene si se pueden seleccionar varios ficheros a la vez.

void setSelectedFile(File)

File getSelectedFile()

Selecciona u obtiene el fichero actualmente seleccionado.

void setSelectedFiles(File[])

File[] getSelectedFiles()

Selecciona u obtiene los ficheros actualmente seleccionados.


1 comentarios:

Daniel André dijo...

Muchas gracias por la información

Publicar un comentario