como usar el componente jfilechooser en una aplicacion gráfica en java



el componente JFileChooser en una aplicación gráfica en Java



Hola a todos, hoy os explicare como podemos usar el componente JFileChooser en una aplicación gráfica en Java.
La clase JFileChooser nos permite acceder a nuestro sistema de ficheros y seleccionar ficheros. Esto nos puede ser útil para abrir fichero que contengan alguna información útil para nuestra aplicación o incluso para guardar información en ficheros.
Vamos a ver como funciona paso a paso, primero vamos a crear una ventana simple con un campo de texto, un botón y un área de texto (con scroll).
Aquí os dejo el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
public class EjemploJFileChooser extends JFrame {
    private JPanel contentPane;
    private JTextField textField;
    private JTextArea textArea;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    EjemploJFileChooser frame = new EjemploJFileChooser();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * Create the frame.
     */
    public EjemploJFileChooser() {
        //Parametros asociados a la ventana
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setLayout(null);
        setContentPane(contentPane);
        textField = new JTextField();
        textField.setToolTipText("Inserta la ruta del fichero de audio");
        textField.setBounds(52, 26, 209, 20);
        contentPane.add(textField);
        textField.setColumns(10);
        JButton btnSeleccionar = new JButton("Seleccionar...");
        btnSeleccionar.setBounds(288, 25, 109, 23);
        contentPane.add(btnSeleccionar);
        textArea = new JTextArea();
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        textArea.setBounds(52, 76, 360, 156);
        JScrollPane scroll=new JScrollPane(textArea);
        scroll.setBounds(52, 76, 360, 156);
        contentPane.add(scroll);
        btnSeleccionar.addActionListener(new ActionListener(){
            public void actionPerformed (ActionEvent e){
            }
        });
    }
}
Así quedaría:
ejemplo jfilechooserLos siguientes bloques de código que veras, son para copiar en el evento del botón, ya que veremos muchas versiones. Primero crearemos un objeto de JFileChooser, lo podemos crear sin parámetros o una ruta por defecto indicada con un String o un File.
Después invocamos el métodoshowOpenDialog(contentPane) que nos devolverá un int, para saber que opción realiza el usuario. Tenemos las siguientes constantes:
  • JFileChooser.CANCEL_OPTION: Si el usuario pulsa en cancelar.
  • JFileChooser.APPROVE_OPTION: Si el usuario pulsa en aceptar
  • JFileCHooser.ERROR_OPTION: Si ocurre algún error.
La que nos interesa es JFileChooser.APPROVE_OPTION, después podemos copiar la ruta de ese fichero con el método getSelectedFile(); se guardara en un objeto File.
Esta ruta la podríamos guardar en el campo de texto, también podríamos hacer que escribiera el contenido del texto en el textarea.
Veamos como queda de momento:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Creamos el objeto JFileChooser
JFileChooser fc=new JFileChooser();
//Abrimos la ventana, guardamos la opcion seleccionada por el usuario
int seleccion=fc.showOpenDialog(contentPane);
//Si el usuario, pincha en aceptar
if(seleccion==JFileChooser.APPROVE_OPTION){
    //Seleccionamos el fichero
    File fichero=fc.getSelectedFile();
    //Ecribe la ruta del fichero seleccionado en el campo de texto
    textField.setText(fichero.getAbsolutePath());
    try(FileReader fr=new FileReader(fichero)){
        String cadena="";
        int valor=fr.read();
        while(valor!=-1){
            cadena=cadena+(char)valor;
            valor=fr.read();
        }
        textArea.setText(cadena);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}
En el caso anterior, solo funcionaria con ficheros legibles, no con otros tipos de ficheros, si queremos que solo se puedan seleccionar los ficheros legibles como los txt, deberemos crear un objeto de la clase FileNameExtensionFilter, le pasaremos un String con la descripción del filtro y después las extensiones en forma de string, un String por extensión. Este código lo añadimos, después de crear el objeto JFileChooser:
1
2
3
4
5
//Creamos el filtro
FileNameExtensionFilter filtro = new FileNameExtensionFilter("*.TXT", "txt");
//Le indicamos el filtro
fc.setFileFilter(filtro);
Así es como lo vemos:ejemplo filtro
Por defecto, JFileChooser solo nos permite elegir ficheros, si queremos elegir solo directorios o ambos, usaremos el métodosetFileSelectionMode(int mode), también tenemos constantes para ello:
  • JFileChooser.FILES_ONLY: solo ficheros.
  • JFileChooser.DIRECTORIES_ONLY: solo directorios.
  • JFileChooser.FILES_AND_DIRECTORIES:ficheros y directorios.
Por ejemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//Creamos el objeto JFileChooser
JFileChooser fc=new JFileChooser();
//Indicamos lo que podemos seleccionar
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
//Creamos el filtro
FileNameExtensionFilter filtro = new FileNameExtensionFilter("*.TXT", "txt");
//Le indicamos el filtro
fc.setFileFilter(filtro);
//Abrimos la ventana, guardamos la opcion seleccionada por el usuario
int seleccion=fc.showOpenDialog(contentPane);
//Si el usuario, pincha en aceptar
if(seleccion==JFileChooser.APPROVE_OPTION){
    //Seleccionamos el fichero
    File fichero=fc.getSelectedFile();
    //Ecribe la ruta del fichero seleccionado en el campo de texto
    textField.setText(fichero.getAbsolutePath());
    try(FileReader fr=new FileReader(fichero)){
        String cadena="";
        int valor=fr.read();
        while(valor!=-1){
            cadena=cadena+(char)valor;
            valor=fr.read();
        }
        textArea.setText(cadena);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}
También podemos seleccionar una serie de ficheros con el métodosetMultiSelectionEnabled(true); lo insertaremos después de crear el objeto. Debemos tener en cuenta, que para almacenar los seleccionados usaremos un array de Files y en lugar de usar el métodogetSelectedFile(); usaremos el método getSelectedFiles();.
Cambiaremos algunas cosas ahora, el campo de texto no lo usaremos:

//Creamos el objeto JFileChooser
JFileChooser fc=new JFileChooser();
//Indicamos que podemos seleccionar varios ficheros
fc.setMultiSelectionEnabled(true);
//Indicamos lo que podemos seleccionar
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
//Creamos el filtro
FileNameExtensionFilter filtro = new FileNameExtensionFilter("*.TXT", "txt");
//Le indicamos el filtro
fc.setFileFilter(filtro);
//Abrimos la ventana, guardamos la opcion seleccionada por el usuario
int seleccion=fc.showOpenDialog(contentPane);
//Si el usuario, pincha en aceptar
if(seleccion==JFileChooser.APPROVE_OPTION){
    //Seleccionamos el fichero
    File[] ficheros=fc.getSelectedFiles();
    for(int i=0;i
        try(FileReader fr=new FileReader(ficheros[i])){
            String cadena="";
            int valor=fr.read();
            while(valor!=-1){
                cadena=cadena+(char)valor;
                valor=fr.read();
            }
            textArea.append(cadena+"\n");
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

Por último, veremos como guardar texto en lugar de abrirlo, el campo de texto no lo usaremos, el textarea contendrá el texto del fichero. Usaremos el método showSaveDialog(contentPane); para guardar el fichero, recuerda escribir el nombre del fichero.

//Creamos el objeto JFileChooser
JFileChooser fc=new JFileChooser();
//Abrimos la ventana, guardamos la opcion seleccionada por el usuario
int seleccion=fc.showSaveDialog(contentPane);
//Si el usuario, pincha en aceptar
if(seleccion==JFileChooser.APPROVE_OPTION){
    //Seleccionamos el fichero
    File fichero=fc.getSelectedFile();
    try(FileWriter fw=new FileWriter(fichero)){
        //Escribimos el texto en el fichero
        fw.write(textArea.getText());
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}



En netBeans, tendreis que hacer lo mismo. También hay un componente por si lo quereis poner directamente en un JFrame.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte

0 comentarios :

Publicar un comentario

Gracias Por tu Comentario Te Respondere Pronto