// Anunciamos que biblioteca usaremos
import java.awt.*;       // los widgets
import java.awt.event.*; // los eventos
import tools.*;          // StringMap

class Gui extends Program {
  // La variable para el frame
  Frame ventana= new Frame("Una  Aplicación con Interfaz Gráfica");
  // Los widgets
  Button agregar= new Button("agregar");
  Button fin= new Button("fin");
  Label etiq= new Label("Libreta de Teléfonos", Label.CENTER);
  TextArea area= new TextArea(5, 20);
  TextField texto= new TextField(15);
  List lista= new List(3);

  // El contenedor adicional para texto, agregar y fin
  Panel panel= new Panel();

  // Un arreglo asociativo que asocia nombres con direcciones
  StringMap tab= new StringMap();

  void run() {
    ventana.setLayout(new BorderLayout()); // asigna el layout
    panel.setLayout(new FlowLayout());

    // armamos el panel
    
    panel.add(texto);
    panel.add(agregar);
    panel.add(fin);

    // armamos la ventana

    ventana.add("North", etiq);
    ventana.add("Center", area);
    ventana.add("East", lista);
    ventana.add("South", panel);

    // Inscripcion para la acción que produce el campo de texto
    // y el botón agregar
    IngresoDeTexto oyente= new IngresoDeTexto();
    texto.addActionListener(oyente);
    agregar.addActionListener(oyente);
    // Inscripción para la acción que produce la lista
    lista.addActionListener(new SeleccionLista());
    // Inscripción para la acción que produce el boton termina
    fin.addActionListener(new SeleccionFin());

    ventana.pack();
    ventana.show();
  }

  public class IngresoDeTexto implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      String nombre= texto.getText(); // Recupera el valor en el campo de texto
      String dir= area.getText();     // Recupera el valor en el área de texto
      tab.put(nombre, dir);
      lista.add(nombre); // Agrega el nombre a la lista
      texto.setText(""); // Borra el campo de texto 
      area.setText("");  // Borra el área de texto
    } 
  }

  public class SeleccionLista implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      String nombre= lista.getSelectedItem();
      String dir= "";
      if (nombre!=null)
        dir= tab.getString(nombre);
      area.setText(dir);
    }
  }
  public class SeleccionFin implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      System.exit(0);
    }
  }
}
