Download TUTORIAL

Document related concepts
no text concepts found
Transcript
TUTORIAL SOBRE JFILECHOSER
¿Qué es un JFileChooser?
Un JFileChooser es una herramienta para elegir archivos, es decir mediante
esta se pueden visualizar carpetas y/o archivos en una determinada carpeta, la apariencia
de este se ve a continuación.
¿Cómo se utiliza esta herramienta?
Como la mayor parte de las herramientas gráficas que nos entrega la librería
Swing de Java, lo primero que debemos hacer es crear una instancia de esta clase, para
esto utilizamos el constructor, esto en código se ve así.
JFileChooser file = new JfileChooser();
Luego este objeto (file) debe colocarse dentro de un JFrame o un JPane para
darle una ubicación. Después de tenerlo creado y ubicado se debe dar la orden de
mostrar el JFileChooser esto se logra con tres instrucciones:
 file.showOpenDialog ( component ), aparece con él titulo de “open”
 file.showSaveDialog( component ) , aparece con el titulo de “save”
 file.showDialog( component, String), , aparece con él titulo que le enviemos.
Estos tienen como retorno un valor entero que se utiliza para saber si el
usuario selecciono un archivo.
Ahora daré la secuencia de instrucciones precisas que se deben colocar para
obtener una salida como el siguiente dibujo, el código esta después del dibujo.
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;
class demo1 extends JFrame implements ActionListener
{
private JButton b= new JButton("buscar");
private JFileChooser file;
public demo1()
{
super("demo 1");
b.addActionListener(this);
Container c=getContentPane();
c.add(b);
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object a=e.getSource();
if(a==b)
{
file=new JFileChooser();
int r=file.showDialog(demo1.this,"busqueda");
}
}
}
class demo
{
public static void main(String arg[])
{
demo1 d=new demo1();
}
}
Opciones De JFileChooser
Como ya tenemos una ventana para navegar por los directorios, bueno lo
que hemos hacho hasta ahora es sumamente básico, por lo mismo mostraremos algunas
opciones interesantes y al final de este tutorial dejare un demo que utilice todas estas
opciones (realmente no usare todas, sino mas bien ocupare una de cada tipo).
 setFileSelectionMode(int):
Esta opción sirve para visualizar archivos, carpetas o ambos, es decir con un
valor apropiado solo se verían carpetas o solo archivos o ambos (opción por defecto,
como lo vimos anteriormente en el ejemplo). A continuación las constantes que acepta:



FILES_ONLY
DIRECTORIES_ONLY
FILES_AND_DIRECTORIES
La forma de utilizar este método es simplemente como sigue:
file.setFileSelectionMode(JFileChooser.FILES_ONLY);
 addChoosableFileFilter( FileFilter ):
Esta opción nos permite realizar un filtrado ha los archivos que existen en el
directorio en el que sé este, dicho de otra forma, en el cuadro solo aparecerán los
archivos de una determinada extensión, o de cierto tamaño, etc. Dependiendo de lo que
deseamos hacer. Para conseguir esta flexibilidad se debe generar una clase nueva que
sea una extensión de la clase “FileFilter”, a continuación mostrare el código de una
clase que solo acepta archivos de imágenes.
public class ImageFilter extends FileFilter {
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String extension = Utils.getExtension(f);
if (extension != null) {
if (extension.equals(Utils.tiff) ||
extension.equals(Utils.tif) ||
extension.equals(Utils.gif) ||
extension.equals(Utils.jpeg) ||
extension.equals(Utils.jpg) ||
extension.equals(Utils.png)) {
return true;
} else {
return false;
}
}
return false;
}
//The description of this filter
public String getDescription() {
return "Just Images";
}
}
FileFilter es una clase abstracta a la que hay que implementar 2 métodos los
cuales son getDescription, el cual define la frase que aparecerá cuando se seleccione
este filtro. El otro método es Accept el cual verifica los archivos aceptados.
Bueno la forma de utilizar este método no varia de cómo se utiliza cualquier
método de cualquier clase.
File.addChoosableFileFilter( new ImagenFilter )
Bueno estas son las opciones más interesante que he encontrado dentro de
esta GUI, en realidad existen otras tales como dar un dibujo a un determinado tipo de
archivo, pero aun no se como lo hace debido ha que trabaja con tres archivos mas, dos
de ellos son abstractos y el otro es una especie de clase de herramientas.
 setCurrentDirectory:
Este método es utilizado para comenzar en un determinado directorio el cual
se debe especificar mediante una clase llamada “File” en el que se da el “path” que en
realidad es un camino como encontrar el directorio. Debo de aclarar que la separacion
de directorios debe hacerse con “\\” (doble \) .
File.setCurrentDirectory( new File ( “c:\\windows\\” ) );
Cumpliendo con lo anteriormente dicho dejo el código de un ejemplo que
hice con las opciones anteriormente mostradas, este pequeño ejemplo muestra archivos
y carpetas, además solo se pueden filtrar los archivos con extensión exe, com, bat.
import java.io.File;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.*;
class demo2 extends JFrame implements ActionListener
{
private JButton b= new JButton("buscar");
private JFileChooser file;
public demo2()
{
super("demo 1");
b.addActionListener(this);
Container c=getContentPane();
c.add(b);
pack();
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
Object a=e.getSource();
if(a==b)
{
file=new JFileChooser();
file.setCurrrentDirectory(new File(“c:\\windows\\escrit~1\\”);
file.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
file.addChoosableFileFilter(new ejecta());
int r=file.showDialog(demo2.this,"busqueda");
}
}
}
class ejecta extends FileFilter
{
public boolean accept(File f)
{
if (f.isDirectory())
{
return true;
}
String nom= f.getName();
int i=nom.lastIndexOf('.');
String ext=null;
ext=nom.substring(i+1);
if (ext != null) {
if (ext.equals("exe") ||
ext.equals("com") ||
ext.equals("bat") )
{
return true;
}
else
{
return false;
}
}
return false;
}
public String getDescription()
{
return "archivos ejecutables";
}
}
class demo
{
public static void main(String arg[])
{
demo2 d=new demo2();
}
}