Está en la página 1de 7

Aprendiendo con JFileChooser Parte 1

6082008
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(); JTextField();

jtfRutaEntrada = new jbExaminar = new jbLoad = new jPanel3 = new

JButton();

JButton(); JPanel(); JDesktopPane();

jDesktopPane1 = new

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()); la ruta del archivo en la caja de texto

}}//mostramos

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 fileImagen) { try{ BufferedImage image = ImageIO.read(fileImagen); jDeskp.setBorder(new PintaImagen(image)); } catch (Exception e){ } } 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; System.out.println("No cargo imagen, sorry"); } void cargarImagen(javax.swing.JDesktopPane jDeskp,File

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!