Aprendiendo con JFileChooser … Parte 1

6 08 2008

JFileChooser es un componente JAVA, que nos permite selecionar y/o grabar cualquier archivo basicamente dentro de nuestro ordenador, en este oportunidad fijaremos la antencion en la funcion de “Seleccion o Abrir”

El ejemplo demostracion trata sobre: “Selecionar un archivo imagen (.jpg, .gif, .png) y luego tendremos q visualizar dicha imagen” aqui la ventana ilustrativa.

Lo Primero q tendremos q hacer es dibujar nuestra interface grafica de usuario(GUI) en este caso “WindowDemoFile”, lo unico nuevo en esta clase es el “JFileChooser”

public JFileChooser jfcExaminarEntrada;
jfcExaminarEntrada = new JFileChooser();

Esta demas decir q la imagen se visualizara dentro de un “JDesktopPane”, aqui en fuente:

import  javax.swing.*;
public class WindowDemoFile extends JFrame {

    public WindowDemoFile() {
        initComponents(); }

   private void initComponents() {
		setTitle("DEMO POR INFORUX");
		setResizable(false);
		jfcExaminarEntrada = new JFileChooser();
        jPanel1 = new  JPanel();
        jtfRutaEntrada = new  JTextField();
        jbExaminar = new  JButton();
        jbLoad = new  JButton();
        jPanel3 = new  JPanel();
        jDesktopPane1 = new  JDesktopPane();

        setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        jPanel1.setBorder( BorderFactory.createTitledBorder("Ubica el Archivo Imagen"));
        jPanel1.setLayout(null);
        jPanel1.add(jtfRutaEntrada);
        jtfRutaEntrada.setBounds(20, 30, 350, 19);

        jbExaminar.setText("...");
        jPanel1.add(jbExaminar);
        jbExaminar.setBounds(400, 30, 50, 25);

        jbLoad.setText("load");
        jPanel1.add(jbLoad);
        jbLoad.setBounds(460, 30, 70, 25);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(30, 30, 550, 70);

        jPanel3.setBorder( BorderFactory.createTitledBorder("Imagen Cargada"));
        jPanel3.setLayout(null);
        jPanel3.add(jDesktopPane1);
        jDesktopPane1.setBounds(20, 30, 530, 340);

        getContentPane().add(jPanel3);
        jPanel3.setBounds(20, 110, 570, 390);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-618)/2, (screenSize.height-542)/2, 618, 542);

		/*declaramos una referencia a nuestra clase control de eventos*/
		ControlaEventos controlaEventos =new ControlaEventos (this);
		jbExaminar.addActionListener(controlaEventos);
		jbLoad.addActionListener(controlaEventos);
    }

    public static void main(String args[]) {
              new WindowDemoFile().setVisible(true);	}

	public JFileChooser jfcExaminarEntrada;
    public JButton jbExaminar;
    public JButton jbLoad;
    public JDesktopPane jDesktopPane1;
    public JPanel jPanel1;
    public JPanel jPanel3;
    public JTextField jtfRutaEntrada;

}
La segunda clase es de nombre “ControlaEventos”, su mismo nombre lo dice, controla todos los eventos producidos por el usuario. solo controlaremos los 2 botones con nombres q muestran “…” y “load”.

La novedad de esto, es q al producirse el evento en el boton q llama al “JFileChoose”. este mostrara un dialogo y dentro de el, estara el componente. Para decirle cual de lo 2 tipos (open y/o save), utilizamos los metodos showOpenDialog o showSaveDialog, segun nuestras necesidades.

int result = d.showOpenDialog(ventana para seleccionar un archivo);
 int result =d.showSaveDialog(ventana para guardar un archivo);

donde “d” es el frame, internalFrame, mejro dicho es la ventana donde se sobrepondra, ademas esta llamada no entrega nada hasta que el usuario ha aceptado un archivo o cancelado la entrada de ldialogo. El valor de retorno es:

JFileChooser.APROVE_OPTION (si haces click en entrar o gravar)

JFileChooser.CANCEL_OPTION. ( si hay evento en el boton cancelar del JFileChooser.)

Aqui el fuente:

import java.awt.event.*;
import java.io.File;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class ControlaEventos implements ActionListener{
	WindowDemoFile ventana;
	File fileImagen;
	public ControlaEventos(WindowDemoFile objeto){
		ventana = objeto;
	}
	public void actionPerformed(ActionEvent evento)
    {
		if (evento.getSource()==ventana.jbExaminar){//si hay evento en el boton examinar
			int returnVal = ventana.jfcExaminarEntrada.showOpenDialog(ventana);//mostramos el jFileChooser
		 	if (returnVal == ventana.jfcExaminarEntrada.APPROVE_OPTION) {//nos aseguramos q haya selecionado algun archivo
             	fileImagen = ventana.jfcExaminarEntrada.getSelectedFile();//obtenemos el archivo selecionado
				ventana.jtfRutaEntrada.setText(fileImagen.toString());	}}//mostramos la ruta del archivo en la caja de texto

		if (evento.getSource()==ventana.jbLoad){//si hay evento en el boton load
		 	if ( fileImagen != null) {
             	cargarImagen(ventana.jDesktopPane1,fileImagen);}}
	}

	/*este metodo recibe el jdeskopPane y el archivo imagen*/
	public  void cargarImagen(javax.swing.JDesktopPane jDeskp,File fileImagen)
	{
        try{
			BufferedImage image = ImageIO.read(fileImagen);
          	jDeskp.setBorder(new PintaImagen(image)); }
        catch (Exception e){   System.out.println("No cargo imagen, sorry");   }
    }
}

La ultima clase, es la misma a la entrada anterior, ahy se explica la clase “PintaImagen”

de todas formas aqui el fuente:

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import javax.swing.border.Border;

public class PintaImagen implements Border{

	private   BufferedImage image ;

	public PintaImagen(BufferedImage image ) {
		this.image=image;}

	public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
	int x0 = x+ (width-image.getWidth())/2;
	int y0 = y+ (height-image.getHeight())/2;
	g.drawImage(image,x0,y0,null); }

    public Insets getBorderInsets(Component c) {
	return new Insets(0,0,0,0);}

    public boolean isBorderOpaque() {
	return true; }
}

Atravez de esta clase convertirlos el “File” a una imagen para pintarse en un JDesktopPane.

Aqui el pantallazo

Como ven. no es complicado mostrar un jFileChooser, solo una simple linea lo haces

Saludos!


Acciones

Información

14 respuestas

22 08 2008
Rasputin

Hola

Excelente!!!, necesitaba una guía como esta. Muchas Gracias.

nota: falta cerrar la clase WindowDemoFile. falta un corchete }.

27 10 2008
balam

pues aun estoy analizando el codigo, pero me sera de mucha ayuda!!!

era justo lo que necesitaba… una guia en el camino.

29 10 2008
balam

MIL GRACIAS POR EL TIP ME SIRVIO DE MUCHO…. SOLO TOME LO NECESARIO DE ACUERDO A MI PROYECTO… SI LOGRE MOSTRAR EL CHOOSER….

« ß ~ A ~ L ~ A ~ M »

30 10 2008
inforux

De nada amigo

6 11 2008
rolix

muy buen manual, es exelente, ojala y los demas que existenen en la red fueran tan faciles de entender como esta, gracias

27 02 2009
Borja

Gracias, me ha sido muy útil, yo lo intenté anteriormente pero no me salía.

5 03 2009
roberto

hola muchas garcias por las yudan k nos dan aun que la verdad me gustaria ese mismo ejemplo pero en lugar de mostrar imagen mostrara el contenido de una rchivo de texto y que cuente caracteres y palabras, saltos de linea, espacios en blanco y sobre todos llaves corchetes.

gracias espero que me puedan ayudar :S

se los agradesco

14 04 2009
juan david

mil gracias esto me sevira de mucha ayuda gracias:

21 04 2009
gonza

te hago una pregunta… se puede con el FileChooser abrir el archivo pero en su programa por defecto.. es decir, necesito que desde el filechooser pueda hacerle dobleclick o algo a un archivo de word y que se abra el archivo pero desde el word… vi soluciones por ahí que no me sirven ya que implican que se expecifique el programa con el que debe abrirse el arcivo y no me sirve así… espero tu respuesta.. gracias…

7 08 2009
oseas

QUISIERA SABER COMO PODRIA HACER UN PROGRAMA CON NETBEANS 6.7.1 QUE LEA ARCHIVOS .TXT Y QUE CUENTE LOS CARACTERES QUE TIENE ME PODRIAS AYUDAR

25 09 2009
Luisao

Facil de entender para alguien que empieza en esto de Java

Gracias

Saludos

23 10 2009
Pablo

Buena man!

3 11 2009
PALADINJP

grax por tu codigo, oye pero yo necesito guardar una imagen k tengo en una ruta dentro de un string , guardarla en otra ruta k seleccionaria con el JFileChooser pero la verdad no entiendo mucho
me podrias ayudar por favor???

4 11 2009
Micky

Gracias man es justo lo que me hacia falta

Deja un comentario