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

public class Gui extends Program { // Se especializa la ventana
  Frame vent;
  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

  void run() { // El constructor para la ventana
    vent= new Frame("Gui");
    vent.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");

    lista = new List(3);
    for (int i = 1; i <= 3; i++) {
      lista.addItem("List item " + i);
    }

    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

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

    // Mostramos la ventana
    vent.pack();
    vent.show();
  }
}

// La extension de Canvas
class MiCanvas extends Canvas {
  public void paint(Graphics g) {
    int w = getSize().width;
    int h = getSize().height;
    g.drawLine(10,10, 100,100);
  }

  public Dimension getMinimumSize() {
    return new Dimension(150,130);
  }

  public Dimension getPreferredSize() {
    return getMinimumSize();
  }
}
