/*
 * 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_RQS_Ma10 extends JApplet implements MouseListener{

	private static final long serialVersionUID = 3762249755706603571L;

	// Se declaran los controles que componen el Applet
	private JPanel Contenedor = null;
	
	private JLabel lblEntrada = null;
	private JLabel lblPermutaciones = null;
	private JLabel lblEsperado = null;
	private JLabel lblRespuesta = null;
	private JLabel lblError = null;
	private JLabel lblResultados = null;
	
	private JTextField txtTamaño = null;
	private JTextField txtEsperado = null;
	private JTextField txtRespuesta = null;
	
	private JTextArea txtPermutaciones = null;
	private JScrollPane scpPermutaciones = null; 	
	
	private JButton btnCalcular = null;

	
	/**
	 * Este es el constructor de la clase 
	 */
	public Applet_RQS_Ma10() 
	{
		super();
		init();
	}
	
	
	// Se inicializa el tamaño del Applet y el JPanel que va a contener a los controles
	public void init() 
	{
		this.setSize(500,350);
		this.setContentPane(initContenedor());
	}
	
	// Inicialización de del contenedor principal de todos los controles
	private JPanel initContenedor()
	{
		if(Contenedor == null)
		{
			Contenedor = new JPanel();
			Contenedor.setLayout(null);
			Contenedor.setBackground(Color.orange);
			Contenedor.setSize(500,350);
			
			// Inicialización de los controles que componen la aplicación
			lblError = new JLabel();
			lblError.setBounds(30,50,400,20);
			lblError.setForeground(Color.red);
			Contenedor.add(lblError);
			
			lblEntrada = new JLabel();
			lblEntrada.setBounds(20,20,350,20);
			lblEntrada.setText("Ingrese el tamaño n para el cual desea realizar el calculo:");
			Contenedor.add(lblEntrada);
			
			txtTamaño = new JTextField();
			txtTamaño.setBounds(360,20,100,20);
			Contenedor.add(txtTamaño);
			
			
			lblResultados = new JLabel();
			lblResultados.setBounds(100,100,100,20);
			lblResultados.setForeground(Color.BLUE);
			lblResultados.setText("RESULTADOS:");
			Contenedor.add(lblResultados);
			
			
			lblPermutaciones = new JLabel();
			lblPermutaciones.setBounds(120,130,200,20);
			lblPermutaciones.setText("Número de Permutaciones: ");
			Contenedor.add(lblPermutaciones);
			
			
			lblEsperado = new JLabel();
			lblEsperado.setBounds(120,200,300,20);
			lblEsperado.setText("Valor Esperado estimado E[x]: ");
			Contenedor.add(lblEsperado);
			
			txtEsperado = new JTextField();
			txtEsperado.setBounds(270,220,100,20);
			txtEsperado.setEditable(false);
			Contenedor.add(txtEsperado);
			
			
			lblRespuesta = new JLabel();
			lblRespuesta.setBounds(120,270,250,20);
			lblRespuesta.setText("Número estimado de ocurrencias: ");
			Contenedor.add(lblRespuesta);
			
			txtRespuesta = new JTextField();
			txtRespuesta.setBounds(270,290,100,20);
			txtRespuesta.setEditable(false);
			Contenedor.add(txtRespuesta);
			
			
			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(362,70,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(scpPermutaciones == null)
		{
			scpPermutaciones = new JScrollPane();
			scpPermutaciones.setBounds(270,150,150,40);
			scpPermutaciones.setViewportView(initTextArea());
		}
		return scpPermutaciones;
	}
	
	private JTextArea initTextArea()
	{
		if(txtPermutaciones == null)
		{
			txtPermutaciones = new JTextArea();
			txtPermutaciones.setEditable( false );
		}
		return txtPermutaciones;
	}
	
	/*
	 * Evento del mouse que se utiliza en la aplicación
	 */
	public void mouseClicked(MouseEvent arg0) 
	{
		try
		{
			lblError.setText("");
			if(Integer.parseInt(txtTamaño.getText().toString()) > 10)
			{
				RQS_Ma10 rqs = new RQS_Ma10(Integer.parseInt(txtTamaño.getText().toString()));
				txtPermutaciones.setText(rqs.NumPerm(Integer.parseInt(txtTamaño.getText().toString())));
				txtEsperado.setText(rqs.Valor_Esperado());
				txtRespuesta.setText(Integer.toString(rqs.nExcedidos));
			}
			else
				lblError.setText("ERROR. El valor ingresado debe ser mayor a 10.");
		}
		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) {}
	
}
