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:
Los 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); |
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.
En netBeans, tendreis que hacer lo mismo. También hay un componente por si lo quereis poner directamente en un JFrame.
//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