/*
 * Created on 14/12/2006
 */

/**
 * @author Carlos Andres Sierra - Cod. 257188
 *         Jefferson Velasquez - Cod. 257196
 *         Juan Albeiro Caballero - Cod. 257200  			
 */

import javax.swing.*;
import javax.swing.JApplet;
import java.awt.Color;
import java.awt.event.*;

public class Applet_PermuteBySorting  extends JApplet implements MouseListener {

	private static final long serialVersionUID = 3258130267179989041L;
	
	// Se declaran los controles que componen el Applet
	private JPanel Contenedor = null;
	
	private JLabel lblEntrada = null;
	private JLabel lblPermutations = null;
	private JLabel lblResultado = null;
	private JLabel lblProbability = null;
	private JLabel lblError = null;
	
	private JTextField txtEntrada = null;
	private JTextField txtPermutations = null;
	
	private JTextArea txtProbability = null;
	private JScrollPane scpProbability = null;
	
	private JButton btnCalcular = null;
	
	/**
	 * Este es el constructor de la clase
	 */
	public Applet_PermuteBySorting() 
	{
		super();
		init();
	}

//	 Se inicializa el tamaño del Applet y el JPanel que va a contener a los controles
	public void init() 
	{
		this.setSize(465,410);
		this.setContentPane(initContenedor());
	}
	
	// Inicialización del panel principal
	private JPanel initContenedor()
	{
		if(Contenedor == null)
		{
			Contenedor = new JPanel();
			Contenedor.setLayout(null);
			Contenedor.setBackground(Color.orange);
			Contenedor.setSize(300,300);
			
			
			// Iniciañización de los controles que componen la aplicación
			lblEntrada = new JLabel();
			lblEntrada.setBounds(30,20,350,20);
			lblEntrada.setText("Ingrese el tamaño n para la permutación:");
			Contenedor.add(lblEntrada);
			
			txtEntrada = new JTextField();
			txtEntrada.setBounds(270,20,50,20);
			Contenedor.add(txtEntrada);
			
			
			lblPermutations = new JLabel();
			lblPermutations.setBounds(50,110,200,20);
			lblPermutations.setText("Número de Permutaciones:");
			Contenedor.add(lblPermutations);
			
			txtPermutations = new JTextField();
			txtPermutations.setBounds(215,110,100,20);
			txtPermutations.setEditable(false);
			Contenedor.add(txtPermutations);
			
			
			lblProbability = new JLabel();
			lblProbability.setBounds(50,140,340,20);
			lblProbability.setText("Distribución de Probabilidad:");
			Contenedor.add(lblProbability);
			
			lblResultado = new JLabel();
			lblResultado.setBounds(50,80,340,20);
			lblResultado.setForeground(Color.blue);
			lblResultado.setText("RESULTADO");
			Contenedor.add(lblResultado);
			
			lblError = new JLabel();
			lblError.setBounds(40,50,450,20);
			lblError.setForeground(Color.red);
			Contenedor.add(lblError);
			
			Contenedor.add(initJButtonAceptar(), null);
			Contenedor.add(initJScrollPane(), null);
		}
		return Contenedor;
	}

	/*
	 * Inicialización del botón "Calcular" de la aplicación 
	 */
	private JButton initJButtonAceptar()
	{
		if(btnCalcular == null)
		{
			btnCalcular = new JButton();
			btnCalcular.setBounds(330,20,90,20);
			btnCalcular.setText("Calcular");
			btnCalcular.addMouseListener(this);
		}
		return btnCalcular;
	}

	/*
	 * Inicialización del JScrollPane y JTextArea que muestran la distribución de
	 * probabilidad para el experimento realizado
	 */
	private JScrollPane initJScrollPane()
	{
		if(scpProbability == null)
		{
			scpProbability = new JScrollPane();
			scpProbability.setBounds(155,170,150,200);
			scpProbability.setViewportView(initTextArea());
		}
		return scpProbability;
	}
	
	private JTextArea initTextArea()
	{
		if(txtProbability == null)
		{
			txtProbability = new JTextArea();
			txtProbability.setEditable( false );
		}
		return txtProbability;
	}
	
	
	/*
	 * Evento del mouse que se utiliza en la aplicación
	 */
	public void mouseClicked(MouseEvent arg0) 
	{
		try
		{
			lblError.setText("");
			if((Integer.parseInt(txtEntrada.getText().toString()) > 1) && (Integer.parseInt(txtEntrada.getText().toString()) < 6))
			{
				Probability_PermuteBySorting pbs = new Probability_PermuteBySorting(Integer.parseInt(txtEntrada.getText().toString()));
				txtPermutations.setText(Integer.toString(pbs.nPermutations));
				txtProbability.setText(pbs.nProbability);
			}
			else
				lblError.setText("ERROR. El tamaño debe estar entre 2 y 5.");
		}
		catch(Exception ex)
		{
			lblError.setText("ERROR. Ha ingresado caracteres erróneos. Verifique por favor.");
		}
	}

	/*
	 * Eventos del mouse que no se utilizan
	 */	
	public void mousePressed(MouseEvent arg0) {}
	public void mouseReleased(MouseEvent arg0) {}
	public void mouseEntered(MouseEvent arg0) {}
	public void mouseExited(MouseEvent arg0) {}

}
