/* * @(#)Applet.java 1.37 97/01/02 * * Copyright (c) 1995, 1996 Sun Microsystems, Inc. All Rights Reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sun. * * 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. * * CopyrightVersion 1.1_beta * */ package java.applet; import java.awt.*; import java.awt.image.ColorModel; import java.net.URL; import java.net.MalformedURLException; import java.util.Hashtable; import java.util.Locale; /** * An applet is a small program that is intended not to be run on * its own, but rather to be embedded inside another application. *

* The Applet class must be the superclass of any * applet that is to be embedded in a Web page or viewed by the Java * Applet Viewer. The Applet class provides a standard * interface between applets and their environment. * * @author Arthur van Hoff * @author Chris Warth * @version 1.42, 03/12/97 * @since JDK1.0 */ public class Applet extends Panel { /** * Applets can be serialized but the following conventions MUST be followed: * * Before Serialization: * An applet must be in STOPPED state. * * After Deserialization: * The applet will be restored in STOPPED state (and most clients will likely * move it into RUNNING state). * The stub field will be restored by the reader. */ transient private AppletStub stub; /** * Sets this applet's stub. This is done automatically by the system. * * @param stub the new stub. * @since JDK1.0 */ public final void setStub(AppletStub stub) { this.stub = (AppletStub)stub; } /** * Determines if this applet is active. An applet is marked active * just before its start method is called. It becomes * inactive immediately after its stop method is called. * * @return true if the applet is active; * false otherwise. * @see java.applet.Applet#start() * @see java.applet.Applet#stop() * @since JDK1.0 */ public boolean isActive() { if (stub != null) { return stub.isActive(); } else { // If stub field not filled in, applet never active return false; } } /** * Gets the document URL. This is the URL of the document in which * the applet is embedded. * * @return the URL of * the document that contains this applet. * @see java.applet.Applet#getCodeBase() * @since JDK1.0 */ public URL getDocumentBase() { return stub.getDocumentBase(); } /** * Gets the base URL. This is the URL of the applet itself. * * @return the URL of * this applet. * @see java.applet.Applet#getDocumentBase() * @since JDK1.0 */ public URL getCodeBase() { return stub.getCodeBase(); } /** * Returns the value of the named parameter in the HTML tag. For * example, if this applet is specified as *

*

* then a call to getParameter("Color") returns the * value "blue". *

* The name argument is case insensitive. * * @param name a parameter name. * @return the value of the named parameter. * @since JDK1.0 */ public String getParameter(String name) { return stub.getParameter(name); } /** * Determines this applet's context, which allows the applet to * query and affect the environment in which it runs. *

* This environment of an applet represents the document that * contains the applet. * * @return the applet's context. * @since JDK1.0 */ public AppletContext getAppletContext() { return stub.getAppletContext(); } /** * Requests that this applet be resized. * * @param width the new requested width for the applet. * @param height the new requested height for the applet. * @since JDK1.0 */ public void resize(int width, int height) { Dimension d = size(); if ((d.width != width) || (d.height != height)) { super.resize(width, height); if (stub != null) { stub.appletResize(width, height); } } } /** * Requests that this applet be resized. * * @param d an object giving the new width and height. * @since JDK1.0 */ public void resize(Dimension d) { resize(d.width, d.height); } /** * Requests that the argument string be displayed in the * "status window". Many browsers and applet viewers * provide such a window, where the application can inform users of * its current state. * * @param msg a string to display in the status window. * @since JDK1.0 */ public void showStatus(String msg) { getAppletContext().showStatus(msg); } /** * Returns an Image object that can then be painted on * the screen. The url that is passed as an argument * must specify an absolute URL. *

* This method always returns immediately, whether or not the image * exists. When this applet attempts to draw the image on the screen, * the data will be loaded. The graphics primitives that draw the * image will incrementally paint on the screen. * * @param url an absolute URL giving the location of the image. * @return the image at the specified URL. * @see java.awt.Image * @since JDK1.0 */ public Image getImage(URL url) { return getAppletContext().getImage(url); } /** * Returns an Image object that can then be painted on * the screen. The url argument must specify an absolute * URL. The name argument is a specifier that is * relative to the url argument. *

* This method always returns immediately, whether or not the image * exists. When this applet attempts to draw the image on the screen, * the data will be loaded. The graphics primitives that draw the * image will incrementally paint on the screen. * * @param url an absolute URL giving the base location of the image. * @param name the location of the image, relative to the * url argument. * @return the image at the specified URL. * @see java.awt.Image * @since JDK1.0 */ public Image getImage(URL url, String name) { try { return getImage(new URL(url, name)); } catch (MalformedURLException e) { return null; } } /** * Returns the AudioClip object specified by the * URL argument. *

* This method always returns immediately, whether or not the audio * clip exists. When this applet attempts to play the audio clip, the * data will be loaded. * * @param url an absolute URL giving the location of the audio clip. * @return the audio clip at the specified URL. * @see java.applet.AudioClip * @since JDK1.0 */ public AudioClip getAudioClip(URL url) { return getAppletContext().getAudioClip(url); } /** * Returns the AudioClip object specified by the * URL and name arguments. *

* This method always returns immediately, whether or not the audio * clip exists. When this applet attempts to play the audio clip, the * data will be loaded. * * @param url an absolute URL giving the base location of the * audio clip. * @param name the location of the audio clip, relative to the * url argument. * @return the audio clip at the specified URL. * @see java.applet.AudioClip * @since JDK1.0 */ public AudioClip getAudioClip(URL url, String name) { try { return getAudioClip(new URL(url, name)); } catch (MalformedURLException e) { return null; } } /** * Returns information about this applet. An applet should override * this method to return a String containing information * about the author, version, and copyright of the applet. *

* The implementation of this method provided by the * Applet class returns null. * * @return a string containing information about the author, version, and * copyright of the applet. * @since JDK1.0 */ public String getAppletInfo() { return null; } /** * Gets the Locale for the applet, if it has been set. * If no Locale has been set, then the default Locale * is returned. * * @return [Needs to be documented!] * @since JDK1.1 */ public Locale getLocale() { Locale locale = super.getLocale(); if (locale == null) { return Locale.getDefault(); } return locale; } /** * Returns information about the parameters than are understood by * this applet. An applet should override this method to return an * array of Strings describing these parameters. *

* Each element of the array should be a set of three * Strings containing the name, the type, and a * description. For example: *

     * String pinfo[][] = {
     *	 {"fps",    "1-10",    "frames per second"},
     *	 {"repeat", "boolean", "repeat image loop"},
     *	 {"imgs",   "url",     "images directory"}
     * };
     * 
*

* The implementation of this method provided by the * Applet class returns null. * * @return an array describing the parameters this applet looks for. * @since JDK1.0 */ public String[][] getParameterInfo() { return null; } /** * Plays the audio clip at the specified absolute URL. Nothing * happens if the audio clip cannot be found. * * @param url an absolute URL giving the location of the audio clip. * @since JDK1.0 */ public void play(URL url) { AudioClip clip = getAudioClip(url); if (clip != null) { clip.play(); } } /** * Plays the audio clip given the URL and a specifier that is * relative to it. Nothing happens if the audio clip cannot be found. * * @param url an absolute URL giving the base location of the * audio clip. * @param name the location of the audio clip, relative to the * url argument. * @since JDK1.0 */ public void play(URL url, String name) { AudioClip clip = getAudioClip(url, name); if (clip != null) { clip.play(); } } /** * Called by the browser or applet viewer to inform * this applet that it has been loaded into the system. It is always * called before the first time that the start method is * called. *

* A subclass of Applet should override this method if * it has initialization to perform. For example, an applet with * threads would use the init method to create the * threads and the destroy method to kill them. *

* The implementation of this method provided by the * Applet class does nothing. * * @see java.applet.Applet#destroy() * @see java.applet.Applet#start() * @see java.applet.Applet#stop() * @since JDK1.0 */ public void init() { } /** * Called by the browser or applet viewer to inform * this applet that it should start its execution. It is called after * the init method and each time the applet is revisited * in a Web page. *

* A subclass of Applet should override this method if * it has any operation that it wants to perform each time the Web * page containing it is visited. For example, an applet with * animation might want to use the start method to * resume animation, and the stop method to suspend the * animation. *

* The implementation of this method provided by the * Applet class does nothing. * * @see java.applet.Applet#destroy() * @see java.applet.Applet#init() * @see java.applet.Applet#stop() * @since JDK1.0 */ public void start() { } /** * Called by the browser or applet viewer to inform * this applet that it should stop its execution. It is called when * the Web page that contains this applet has been replaced by * another page, and also just before the applet is to be destroyed. *

* A subclass of Applet should override this method if * it has any operation that it wants to perform each time the Web * page containing it is no longer visible. For example, an applet * with animation might want to use the start method to * resume animation, and the stop method to suspend the * animation. *

* The implementation of this method provided by the * Applet class does nothing. * * @see java.applet.Applet#destroy() * @see java.applet.Applet#init() * @since JDK1.0 */ public void stop() { } /** * Called by the browser or applet viewer to inform * this applet that it is being reclaimed and that it should destroy * any resources that it has allocated. The stop method * will always be called before destroy. *

* A subclass of Applet should override this method if * it has any operation that it wants to perform before it is * destroyed. For example, an applet with threads would use the * init method to create the threads and the * destroy method to kill them. *

* The implementation of this method provided by the * Applet class does nothing. * * @see java.applet.Applet#init() * @see java.applet.Applet#start() * @see java.applet.Applet#stop() * @since JDK1.0 */ public void destroy() { } }