import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Problema6 extends Applet
                       implements ActionListener, ItemListener

{
   String[] nomMonedas = {"Euros","Pesetas","Marcos","Francos","Libras",
                          "Liras","Florines","Escudos","Dolares","Yens"};
   double[] valMonedas = {1.0, 166.386, 1.95583, 6.55957, 0.671,
                          1936.27, 2.20371, 200.482, 1.09, 128.94};
   boolean[] decMonedas = {true, false, true, true, true,
                           false, true, false, true, false};

   TextField edtValor1;
   TextField edtValor2;
   Choice lisUnid1;
   Choice lisUnid2;
   int unid1 = 0;
   int unid2 = 0;

   public static void main( String[] args )
   {
      Frame ventana = new Frame("Conversion de monedas");
      Problema6 applet = new Problema6();
      applet.init();
      ventana.setLayout( new BorderLayout() );
      ventana.add("Center",applet);
      ventana.pack();
      ventana.show();
   }

   public void init( )
   {
       creaInterfaz();
   }

   public void creaInterfaz( )
   {
      lisUnid1 = new Choice();
      lisUnid2 = new Choice();
      for(int i=0; i<nomMonedas.length; i++) {
        lisUnid1.add(nomMonedas[i]);
        lisUnid2.add(nomMonedas[i]);
      }
      lisUnid1.select(unid1);
      lisUnid2.select(unid2);
      lisUnid1.addItemListener(this);
      lisUnid2.addItemListener(this);

      edtValor1 = new TextField("1.0",20);
      edtValor2 = new TextField("1.0",20);
      edtValor1.addActionListener(this);
      edtValor2.addActionListener(this);

      Panel panel1 = new Panel();
      panel1.setLayout( new BorderLayout(5,5) );
      panel1.add("Center", edtValor1);
      panel1.add("East", lisUnid1);

      Panel panel2 = new Panel();
      panel2.setLayout( new BorderLayout(5,5) );
      panel2.add("Center", edtValor2);
      panel2.add("East", lisUnid2);

      Panel panPpal = new Panel();
      panPpal.setLayout( new GridLayout(4,1,5,5) );
      panPpal.add( new Label("Valor 1:") );
      panPpal.add( panel1 );
      panPpal.add( new Label("Valor 2:") );
      panPpal.add( panel2 );

      setLayout( new BorderLayout(5,5) );
      add("North",panPpal);
   }

   public void actionPerformed( ActionEvent e )
   {
      Object fuente = e.getSource();
      if( fuente == edtValor1 ) { cambioValor1(); return; }
      if( fuente == edtValor2 ) { cambioValor2(); return; }
   }

   public void itemStateChanged( ItemEvent e )
   {
      Object fuente = e.getSource();
      if( fuente == lisUnid1 ) { cambioUnidad1(); return; }
      if( fuente == lisUnid2 ) { cambioUnidad2(); return; }
   }

   private void cambioValor1( )
   {
      double val1, val2;
      try {
        val1 = Double.valueOf( edtValor1.getText() ).doubleValue();
        val2 = valMonedas[unid2]*val1/valMonedas[unid1];
        val2 = decMonedas[unid2] ? Math.rint(100.0*val2)/100.0
                                 : Math.rint(val2);
        edtValor2.setText(""+val2);
      } catch( Exception e ) {}
   }

   private void cambioValor2( )
   {
      double val1, val2;
      try {
        val2 = Double.valueOf( edtValor2.getText() ).doubleValue();
        val1 = valMonedas[unid1]*val2/valMonedas[unid2];
        val1 = decMonedas[unid1] ? Math.rint(100.0*val1)/100.0
                                 : Math.rint(val1);
        edtValor1.setText(""+val1);
      } catch( Exception e ) {}
   }

   private void cambioUnidad1( )
   {
      double val;
      try {
        val = Double.valueOf( edtValor1.getText() ).doubleValue();
        val /= valMonedas[unid1];
        unid1 = lisUnid1.getSelectedIndex();
        val *= valMonedas[unid1];
        val = decMonedas[unid1] ? Math.rint(100.0*val)/100.0
                                : Math.rint(val);
        edtValor1.setText(""+val);
      } catch( Exception e ) {}
   }

   private void cambioUnidad2( )
   {
      double val;
      try {
        val = Double.valueOf( edtValor2.getText() ).doubleValue();
        val /= valMonedas[unid2];
        unid2 = lisUnid2.getSelectedIndex();
        val *= valMonedas[unid2];
        val = decMonedas[unid2] ? Math.rint(100.0*val)/100.0
                                : Math.rint(val);
        edtValor2.setText(""+val);
      } catch( Exception e ) {}
   }
}
