Regularmente cuando se comienza a crear interfaces graficas, llega un momento en donde necesitamos crear diferentes programas para manipular archivos. Sin embargo, los usuarios aveces necesitan guardar, editar y abrir archivos de manera fácil.

Ademas crear un cuadro de dialogo que permita abrir y guardar archivos, da un aspecto mas profesional a la interfaz. Por esta y mas razones se recomienda implementar esta clase conocida como JFIleChooser.

En este articulo nos limitaremos a enseñar como manipular archivos, pues crearemos un articulo especial sobre el tema. Para comenzar a crear nuestro cuadro de dialogo, creare una ventana con menú (aunque esto no es necesario, puede implementarlo de diferentes formas):

package menus;

import javax.swing.JFrame;

public class Menus {

    public static void main(String[] args) {
        JFrame f = new JFrame("Ventana con menus");
        BarraMenu barra = new BarraMenu();
        barra.addEventos(new OyenteMenu());
        f.setJMenuBar(barra);
        f.setSize(400, 300);
        f.setLocation(120, 100);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

}
package menus;

import javax.swing.*;

public class BarraMenu extends JMenuBar {
    
    private JMenu archivo;
    private JMenuItem abrir;
    private JMenuItem guardar;
    private JMenuItem salir;
    
    public BarraMenu() {
        addMenus();
    }
    
    public final void addMenus() {
        archivo = new JMenu("Archivo");
        add(archivo);
        abrir = new JMenuItem("Abrir");
        archivo.add(abrir);
        guardar = new JMenuItem("Guardar");
        archivo.add(guardar);
        archivo.addSeparator();
        salir = new JMenuItem("Salir");
        archivo.add(salir);
    }
    
    public void addEventos(OyenteMenu e) {
        abrir.addActionListener(e);
        salir.addActionListener(e);
        guardar.addActionListener(e);
    }
    
}

Explicare de forma breve que hace el código anterior, el primer cuadro de código simplemente se encarga de crear el marco (JFrame) e instancias para usar las demás clases, el segundo bloque crea el menú, el tercero es donde se gestiona los eventos de tipo ActionListener.

Dentro de la clase donde se gestionan los eventos, se agregara el código para crear cuadros de dialogo. La clase JFileChooser ofrece varios métodos con funciones diferentes. Sin embargo, mencionare los básicos (los mas utilizados).

Para crear a comenzar nuestro primer cuadro de dialogo, primero debemos crear una instancia a la clase JFileChooser y después debemos hacer uso de los siguientes métodos:

Cuadro de Dialogo para Abrir Archivos

showOpenDialog(Component parent): se encarga de crear el cuadro de dialogo que permite abrir archivos, este método es de tipo entero. Por lo que, devuelve diferentes valores enteros y son los siguientes:

JFileChooser.CANCEL_OPTION
JFileChooser.APPROVE_OPTION
JFileChooser.ERROR_OPTION

Lo anterior son constantes de clase (son valores enteros), si deseas conocer el valor de las constantes recomiendo visitar el API de java. Mencionaremos especialmente la constante APPROVE_OPTION este valor es devuelto cuando seleccionan el archivo y se presiona el botón de abrir:

Código:

        int opcion = seleccion.showOpenDialog(null);
        if (opcion == JFileChooser.APPROVE_OPTION) {
            String ruta = seleccion.getSelectedFile().getAbsolutePath();
        }

Sabemos que el metodo showOpenDialog devuelve valores de tipo entero, por esta razón debemos almacenar los valores en una variable. Con el condicional le decimos que si el archivo se aprueba nos devuelva la ruta. Sabiendo la ruta usted sera capaz de leer el contenido dentro del archivo mediante otras clases (del tema hablaremos en otro articulo).

Ademas, el método recibe por parámetro un objeto de tipo Component. Debe pasar el componente padre, por ejemplo: una ventana o simplemente indicarle null (diciendo que no existe un componente padre). Esto simplemente asegura centrar el cuadro de dialogo respecto al componente padre.

Cuadro de Dialogo para Guardar Archivos

showSaveDialog(Component parent): funciona igual que el método anterior, la única diferencia el botón. Solo permite guardar archivos y no abrir. Devuelve las mismas constantes y el código es igual:

        int opcion = seleccion.showSaveDialog(null);
        if (opcion == JFileChooser.APPROVE_OPTION) {
            String ruta = seleccion.getSelectedFile().getAbsolutePath();
        }

setFileFilter(FileFilter filter): Si deseas filtrar el tipo de archivo a mostrar puedes hacerlo utilizando este método, solo recibe por parámetro un objeto de tipo FileFilter y puedes hacerlo con la clase FileNameExtensionFilter, esta clase recibe por parámetro el nombre a mostrar en el cuadro de dialogo y el tipo de archivo a filtrar como se muestra a continuación:

seleccion.setFileFilter(new FileNameExtensionFilter("Archivo de Texto", "txt"));

getSelectedFile(): este metodo solo devuelve un objecto de tipo file.

Para terminar, este todo lo mencionado sobre FileChooser puede ser implementado de la siguiente forma:

package menus;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class OyenteMenu implements ActionListener {
    
    private JFileChooser seleccion;
    
    public OyenteMenu() {
        seleccion = new JFileChooser();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String tipo = e.getActionCommand();
        switch (tipo) {
            case "Abrir":
                opcionAbrir();
                break;
            case "Guardar":
                opcionGuardar();
                break;
            case "Salir":
                System.exit(0);
        }
    }
    
    //Codigo para crear cuadro de dialogo con JFileChooser
    public void opcionAbrir() {
        seleccion.setFileFilter(new FileNameExtensionFilter("Archivo de Texto", "*"));
        int opcion = seleccion.showOpenDialog(null);
        if (opcion == JFileChooser.APPROVE_OPTION) {
            String ruta = seleccion.getSelectedFile().getAbsolutePath();
        }
    }

    public void opcionGuardar() {
        int opcion = seleccion.showSaveDialog(null);
        if (opcion == JFileChooser.APPROVE_OPTION) {
            String ruta = seleccion.getSelectedFile().getAbsolutePath();
        }
    }
    //Fin de codigo JFileChooser

}

El codigo agrega eventos y permite detectar las opciones pulsadas del usuario. El resultado final puede ser apreciado en la primer imagen del post. Espero sea de gran utilidad lo explicado y tengan curiosidad de implementar lo aprendido en mas proyectos GUIs.