NoneWindow.java


/*
 * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * and its documentation for NON-COMMERCIAL purposes and without
 * fee is hereby granted provided that this copyright notice
 * appears in all copies. Please refer to the file "copyright.html"
 * for further important copyright and licensing information.
 *
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
 * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
 */
import java.awt.*;

public class NoneWindow extends Frame {
    private boolean inAnApplet = true;
    private boolean laidOut = false;
    private Button b1, b2, b3;

    public NoneWindow() {
	super();
	setLayout(null);
	setFont(new Font("Helvetica", Font.PLAIN, 14));

	b1 = new Button("one");
	add(b1);
	b2 = new Button("two");
	add(b2);
	b3 = new Button("three");
	add(b3);
    }

    public void paint(Graphics g) {
	if (!laidOut) {
	    Insets insets = insets();
	    //We're guaranteed that insets() will return a valid Insets
	    //if called from paint() -- it isn't valid when called from 
	    //the constructor.
	    insets = insets(); // We could perhaps cache this in an ivar, but
				  // insets can change, and when they
				  // do, the AWT creates a whole new Insets
				  // object; the old one is invalid.
				  // BUT WILL IT REALLY CHANGE???
	    b1.reshape(50 + insets.left, 5 + insets.top, 50, 20);
	    b2.reshape(70 + insets.left, 35 + insets.top, 50, 20);
	    b3.reshape(130 + insets.left, 15 + insets.top, 50, 30);

	    laidOut = true;
	}
    }

    public synchronized boolean handleEvent(Event e) {
        if (e.id == Event.WINDOW_ICONIFY) {//DOESN'T seem to be necessary
            hide(); 
        }
        if (e.id == Event.WINDOW_DESTROY) {
            if (inAnApplet) {
                dispose();
                return false;
            } else {
                System.exit(0);
            }
        }   
        return super.handleEvent(e);
    }

    public static void main(String args[]) {
	NoneWindow window = new NoneWindow();
	Insets insets = window.insets();
	//How do we know insets is valid here?
        window.inAnApplet = false;

	window.setTitle("NoneWindow Application");
	window.resize(250 + insets.left + insets.right,
		      90 + insets.top + insets.bottom);
        window.show();
    }
}