/*
 * 1.1 code.
 */

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

public class ComponentEventDemo extends Applet
			        implements ComponentListener,
			                   ActionListener {
    TextArea display;
    Frame aFrame;
    public boolean showIt = false;
    final static String SHOW = "show";
    final static String CLEAR = "clear";
    String newline;

    public void init() {
	newline = System.getProperty("line.separator");
	setLayout(new BorderLayout());

	display = new TextArea(5, 20);
	display.setEditable(false);
	add("Center", display);

	Button b1 = new Button("Start playing...");
	b1.setActionCommand(SHOW);
	b1.addActionListener(this);
	add("North", b1);

	Button b2 = new Button("Clear");
	b2.setActionCommand(CLEAR);
	b2.addActionListener(this);
	add("South", b2);

	aFrame = new Frame("A Frame");
	ComponentPanel p = new ComponentPanel(this);
	aFrame.addComponentListener(this);
	p.addComponentListener(this);
	aFrame.add("Center", p);
	aFrame.pack();

	aFrame.addWindowListener(new WindowAdapter() {
	    public void windowClosing(WindowEvent e) {
		showIt = false;
		aFrame.setVisible(false);
	    }
	});
    }

    public void actionPerformed(ActionEvent e) {
	if (e.getActionCommand() == SHOW) {
	    showIt = true;
	    aFrame.setVisible(true);
	} else { //CLEAR
	    display.setText("");
	}
    }

    public void stop() {
	aFrame.setVisible(false);
    }

    public void start() {
	if (showIt) {
	    aFrame.setVisible(true);
	}
    }

    protected void displayMessage(String message) {
	try {
	    display.append(message + newline);
	} catch (Exception event) {}
    }

    public void componentHidden(ComponentEvent e) {
	displayMessage("componentHidden event from "
		       + e.getComponent().getClass().getName());
    }

    public void componentMoved(ComponentEvent e) {
	displayMessage("componentMoved event from "
		       + e.getComponent().getClass().getName());
    }

    public void componentResized(ComponentEvent e) {
	displayMessage("componentResized event from "
		       + e.getComponent().getClass().getName());
    }

    public void componentShown(ComponentEvent e) {
	displayMessage("componentShown event from "
		       + e.getComponent().getClass().getName());
    }
}

class ComponentPanel extends Panel 
		     implements ItemListener {
    Label label;
    Checkbox checkbox;

    ComponentPanel(ComponentEventDemo listener) {
	setLayout(new BorderLayout());

	label = new Label("This is a Label", Label.CENTER);
	add("Center", label);

	checkbox = new Checkbox("Label visible", true);
	checkbox.addItemListener(this);
	add("South", checkbox);

	label.addComponentListener(listener);
	checkbox.addComponentListener(listener);
    }

    public void itemStateChanged(ItemEvent e) {
	if (e.getStateChange() == ItemEvent.SELECTED) {
	    label.setVisible(true);
	} else {
	    label.setVisible(false);
	}
    }
}