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(); } }