import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;

public class SwingGoodbyeWorld
  extends JApplet
{

  public static void main ( String[] args )
  {
    SwingGoodbyeWorld app = new SwingGoodbyeWorld ();

    JFrame frame = new JFrame ( "SwingGoodbyeWorld" );
    frame.setSize ( 150, 150 );
    frame.getContentPane().add ( app );
    frame.show ();

    app.m_applet = false;
    app.init ();

    WindowAdapter windowCloser =
      new WindowAdapter ()
      {
	public void windowClosing ( WindowEvent wevt )
	{
	  System.exit ( 0 );
	}
      };

    frame.addWindowListener ( windowCloser );
  }

  public void init ()
  {
    super.init ();
    JButton btn = new JButton ( "Goodbye World!" );
    getContentPane().add ( btn );

    ActionListener quiter =
      new ActionListener ()
      {
	public void actionPerformed ( ActionEvent aevt )
	{
	  if ( m_applet )
	  {
	    // cannot really destory the applet so make its button go away
	    removeAll (); // why doesn't removeAll force a refresh ????
	  }
	  else
	    System.exit ( 0 );
	}
      };

    btn.addActionListener ( quiter );
  }

  private boolean m_applet = true;

}
