// Anunciamos que usaremos la biblioteca de widgets de la AWT
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class GuiApplet102 extends Applet { // Se especializa la ventana
  Button boton;  // Se crean variables de instancia
  Label etiq;    // para cada widget
  TextArea area;
  TextField texto;
  Checkbox check;
  List lista;
  Canvas canvas;

  Panel panel;   // El contenedor adicional para texto, boton y check

  public void init() {
    setLayout(new BorderLayout()); // asigna el layout

    // crea los widgets
    boton= new Button("quit"); 
    etiq= new Label("ˇHello World!", Label.CENTER);
    area= new TextArea(5, 20);
    texto= new TextField(15);
    check= new Checkbox("check");

    // Versión original: lista = new List(3);
    // La versión 1.02 requiere un segundo argumento
    lista = new List(3, false);

    canvas= new MiCanvas();

    panel= new Panel(); // El contenedor adicional
    panel.setLayout(new FlowLayout());

    // armamos el panel
    
    panel.add(texto);
    panel.add(boton);
    panel.add(check);

    // armamos la ventana

    add("North", etiq);
    add("West", area);
    add("East", lista);
    add("Center", canvas);
    add("South", panel);

    // Lectura de parámetros
    String paramEtiqueta= getParameter("etiqueta");
    if (paramEtiqueta!=null) etiq.setText(paramEtiqueta);

    String paramItem0= getParameter("item0");
    if (paramItem0!=null) lista.addItem(paramItem0);
  }

  // Versión original:
  // public class IngresoDeTexto implements ActionListener {
  //   public void actionPerformed(ActionEvent e) {
  //     lista.add(texto.getText()); // Agrega el ítem a la lista
  //     texto.setText(""); // Borra el campo de texto
  // }
  // La versión 1.02 no posee la interfaz ActionListener
  public boolean action(Event ev, Object what) {
    if (ev.target==texto) {
      // Versión original:
      // lista.add(texto.getText()); // Agrega el ítem a la lista
      // La versión 1.02 no tiene add, sólo addItem que hace lo mismo
      lista.addItem(texto.getText()); // Agrega el ítem a la lista
      texto.setText(""); // Borra el campo de texto 
      return true;
    }
    else if (ev.target==lista) {
      // ...
      return true;
    }
    return false;
} }

// La extension de Canvas
class MiCanvas extends Canvas {
  public void paint(Graphics g) {
    // Version original:
    // int w = getSize().width;
    // int h = getSize().height;
    // En la versión 1.02 este método se llama size().
    int w = size().width;
    int h = size().height;
    g.drawLine(10,10, 100,100);
  }

  // Version original:
  // public Dimension getMinimumSize()
  // En la versión 1.02 este método se llama minimumSize.
  public Dimension minimumSize() {
    return new Dimension(150,130);
  }

  // Version original:
  // public Dimension getPreferredSize()
  // En la versión 1.02 este método se llama preferredSize.
  public Dimension preferredSize() {
    // Versión original: return getMinimumSize();
    return minimumSize();
  }
}
