
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.*;

/**
 *Clase que se encarga de mostrar un JFileChooser personalizado
 * con el cual se selecciona un archivo de imagen, para luego ser almacenado
 * en un vector miembro de la clase  Conversor, para luego esta se encargue 
 * de redimensionarlo. Implementa el ActionListener del botón "Cargar Imagen".
 * Basado en algunos aspectos a los ejemplos de swing del sitio oficial de java
 * http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/examples/components/index.html
 */
public class FileChooserDemo2 extends JPanel
                              implements ActionListener {
    static private String newline = "\n";
    private JTextArea log;
    private JLabel bottomlabel;
    public File file;
    private JFileChooser fc;
    public Conversor conversor;
    private int count = 0;

    
 /**Constructor que crea y setea los paneles que formaran la aplicación, junto a los paneles también ubica
 * botones, área de notificación, zona de texto, etc.
 */
    public FileChooserDemo2() {
        super(new BorderLayout());
        log = new JTextArea(10,20);
        log.setMargin(new Insets(5,5,5,5));
        log.setEditable(false);
        JScrollPane logScrollPane = new JScrollPane(log);
	add(logScrollPane, BorderLayout.CENTER);

	JPanel buttonPane = new JPanel();
	buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.PAGE_AXIS));
	buttonPane.setPreferredSize(new Dimension(150,100));
	buttonPane.add(Box.createRigidArea(new Dimension(0,50)));
		
	JButton sendButton = new JButton("Cargar Imagen");
        sendButton.setAlignmentX(Component.CENTER_ALIGNMENT);
	sendButton.addActionListener(this);
	buttonPane.add(sendButton);

	buttonPane.add(Box.createRigidArea(new Dimension(0,100)));

	conversor = new Conversor();
	JButton sendButton2 = new JButton("  Convertir  ");
	sendButton2.setAlignmentX(Component.CENTER_ALIGNMENT);	
	sendButton2.addActionListener(conversor);//AQUI PONER EL ACTION LISTENER PARA CONVERTIR 
	buttonPane.add(sendButton2);
	
	add(buttonPane, BorderLayout.LINE_START);
	
	bottomlabel = new JLabel("Conversor de imágenes v1.0");
	add(bottomlabel, BorderLayout.PAGE_END);
    }
/**
*método que ejecuta las órdenes ante el evento programado
*Crea un JFileChooser, le agrega el filtro, la vista personalizada de íconos y
*la vista previa de imágenes. Luego procesa el archivo obtenido, agregandolo a un vector miembro
*de la clase Conversor, para que dicha clase más tarde lo procese, además informa en el área de notificación de la aplicación
*el resultado de la operación.
*/ 
    public void actionPerformed(ActionEvent e) {
        //Set up the file chooser.
        if (fc == null) {
            fc = new JFileChooser();

	    //Add a custom file filter and disable the default
	    ImageFilter filtro = new ImageFilter();
            fc.addChoosableFileFilter(filtro);
            fc.setAcceptAllFileFilterUsed(false);
	    fc.setFileFilter(filtro);

	    //Add custom icons for file types.
            fc.setFileView(new ImageFileView());

	    //Add the preview pane.
            fc.setAccessory(new ImagePreview(fc));
        }

        //Show it.
        int returnVal = fc.showDialog(FileChooserDemo2.this,
                                      "Cargar Imagen");

        //Process the results.
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            file = fc.getSelectedFile();  // AQUI ESTA EL ARCHIVO SELECCIONADO
            conversor.setFile(file);  // se deja la imagen en el objeto Conversor
            count++;
            log.append(file.getName()
                       + "." + newline);
            if(count==1)
            	bottomlabel.setText(count+" imagen cargada");
            else
            	bottomlabel.setText(count+" imágenes cargadas");
            
        } else {
            bottomlabel.setText("Acción Cancelada");
        }
 
    }
}
