
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.BoxLayout;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JComboBox;


public class Fibonacci extends JApplet implements ActionListener{
	
	JPanel MyPanel;
	JLabel MyLabel;
	JTextField Texto;
	JComboBox  lista;
	JButton Boton;
	JTextArea area;
	JScrollPane Barra;
	
	public void init(){
		
		String[] clase = { "Short","Integer","Long"};
		
		MyPanel = new JPanel();
		MyLabel = new JLabel("Digite el termino deseado");
		Texto   = new JTextField(8);
		lista   = new JComboBox(clase);
		
		lista.setSelectedIndex(0);
		
		Boton = new JButton("Click@");
		Boton.addActionListener(this);
		
		area = new JTextArea("Resultados: \n", 20 , 35 );
		Barra = new JScrollPane(area);
		
		MyPanel.add(MyLabel);
		MyPanel.add(Texto);
		MyPanel.add(lista);
		MyPanel.add(Boton);
		MyPanel.add(Barra);
		
		getContentPane().add(MyPanel);
		
		}//
		
	public void Sfibo(int ter){
		
		short fib = 0 , fib2 = 1 ;
		short fib3=0;
		
		for(int i=1;i<=ter;i++){
			
			fib3 = (short)(fib+fib2);
			fib = fib2;
			fib2 = fib3;
			
			if(fib3<0){
				area.append("\n"+i+" : En este termino hubo OVERFLOW...");
				break;				
				}
			area.append("\n"+i+" : "+fib3);			
			}
		
		
		}
		
	public void Ifibo(int ter){
		
		int fib = 0 , fibo = 1 , fibos;
		
		for(int i=1;i<=ter;i++){
			
			fibos = fib + fibo;
			fib = fibo;
			fibo = fibos;
			
			if(fibos<0){
				area.append("\n"+i+" : En este termino hubo OVERFLOW...");
				break;				
				}
			area.append("\n"+i+" : "+fibos);
		}
	}
		
	public void Lfibo(int ter){
		
		long fib = 0 , fibo = 1 , fibos;
		
		for(int i=1;i<=ter;i++){
			
			fibos = fib + fibo;
			fib = fibo;
			fibo = fibos;
			
			if(fibos<0){
				area.append("\n"+i+" : En este termino hubo OVERFLOW...");
				break;				
				}
			area.append("\n"+i+" : "+fibos);	
		
		}
}
		
	public void actionPerformed (ActionEvent e){
		
		area.setText("Resultados: \n");
		int term = Integer.parseInt(Texto.getText());
		String linea = String.valueOf(lista.getSelectedItem());
		
		if(linea == "Long")
			Lfibo(term);
			else
			if(linea == "Integer")
				Ifibo(term);
				else
					Sfibo(term);				
		
		}	
	
	}