import java.applet.*;
import java.awt.*;
import java.awt.event.*;


public class BasicComponentApplet extends Applet {

  public void init() {

    Panel panel = new Panel();

      GridBagLayout gbl = new GridBagLayout();
      panel.setLayout(gbl);
      GridBagConstraints gbc = new GridBagConstraints();

      gbc.anchor = GridBagConstraints.NORTHWEST;
      gbc.insets = new Insets(2, 3, 2, 3);


      gbc.gridy = 0;

      Label label1 = new Label("Label: ");

        gbc.gridx = 0;
        gbl.setConstraints(label1, gbc);
        panel.add(label1);

    // AWT Component: Label, 1 line
      Label label = new Label("A simple label");

        gbc.gridx = 1;
        gbl.setConstraints(label, gbc);
        panel.add(label);


      gbc.gridy = 1;

      Label label2 = new Label("Button: ");

        gbc.gridx = 0;
        gbl.setConstraints(label2, gbc);
        panel.add(label2);

    // AWT Component: Button, 1 line
      Button button = new Button("A simple push-button");

        gbc.gridx = 1;
        gbl.setConstraints(button, gbc);
        panel.add(button);


      gbc.gridy = 2;

      Label label3 = new Label("Canvas: ");

        gbc.gridx = 0;
        gbl.setConstraints(label3, gbc);
        panel.add(label3);

    // AWT Component: Canvas, 1 line
      Canvas canvas = new MyCanvas();

        gbc.gridx = 1;
        gbl.setConstraints(canvas, gbc);
        panel.add(canvas);


      gbc.gridy = 3;

      Label label4 = new Label("Checkbox: ");

        gbc.gridx = 0;
        gbl.setConstraints(label4, gbc);
        panel.add(label4);

    // AWT Component: Checkbox, 1 line
      Checkbox checkbox = new Checkbox("A simple checkbox");

        gbc.gridx = 1;
        gbl.setConstraints(checkbox, gbc);
        panel.add(checkbox);


      gbc.gridy = 4;

      Label label5 = new Label("Choice: ");

        gbc.gridx = 0;
        gbl.setConstraints(label5, gbc);
        panel.add(label5);

    // AWT Component: Choice, 5 lines
      Choice choice = new Choice();
      choice.add("... featuring");
      choice.add("multiple");
      choice.add("lines in");
      choice.add("a drop down.");

        gbc.gridx = 1;
        gbl.setConstraints(choice, gbc);
        panel.add(choice);


      gbc.gridy = 5;

      Label label6 = new Label("List: ");

        gbc.gridx = 0;
        gbl.setConstraints(label6, gbc);
        panel.add(label6);

    // AWT Component: List, 5 lines
      List list = new List(3, false);
      list.add("... featuring");
      list.add("multiple");
      list.add("rows in a");
      list.add("list.");

        gbc.gridx = 1;
        gbl.setConstraints(list, gbc);
        panel.add(list);


      gbc.gridy = 8;

      Label label7 = new Label("TextField: ");

        gbc.gridx = 0;
        gbl.setConstraints(label7, gbc);
        panel.add(label7);

    // AWT Component: TextField, 1 line
      TextField textfield = new TextField("A simple text field");

        gbc.gridx = 1;
        gbl.setConstraints(textfield, gbc);
        panel.add(textfield);


      gbc.gridy = 9;

      Label label8 = new Label("TextArea: ");

        gbc.gridx = 0;
        gbl.setConstraints(label8, gbc);
        panel.add(label8);

    // AWT Component: TextArea, 1 line
      TextArea textarea = new TextArea("A simple\ntext area", 4, 30);

        gbc.gridx = 1;
        gbl.setConstraints(textarea, gbc);
        panel.add(textarea);


      gbc.gridy = 13;

      Label label9 = new Label("Scrollbar: ");

        gbc.gridx = 0;
        gbl.setConstraints(label9, gbc);
        panel.add(label9);

    // AWT Component: Scrollbar, 1 line
      Scrollbar scrollbar = new Scrollbar(Scrollbar.HORIZONTAL, 0, 60, 0, 300);

        gbc.gridx = 1;
        gbl.setConstraints(scrollbar, gbc);
        panel.add(scrollbar);

    add(panel);
  }
}


// Custom Canvas. The default canvas is white with no contents - this demonstrates the purpose of a canvas.
class MyCanvas extends Canvas {

  public MyCanvas() {

    setSize(200, 40);
  }

  public void paint(Graphics g) {

    g.setColor(Color.green);
    g.fillRect(0, 0, 100, 40);
    g.setColor(Color.blue);
    g.fillRect(100, 0, 200, 40);
    g.setColor(Color.red);
    g.drawString("A canvas to paint stuff onto.", 10, 15);
  }
}
