Applets que se comunican (estando en la misma página)
Introducción
Aspectos de interés en este ejemplo:
- Veamos cómo pueden comunicarse los applets de una página. El applet de la derecha transmite mensajes al de la
izquierda. ¿cómo? ponga el texto que desea enviar en el
campo de texto de transmisor y presione el botón "enviar". El applet de la izquierda recibe el mensaje y lo muestra
en su campo de texto.
- El applet receptor muestra una imagen.
- El applet transmisor puede hacer que su navegador abra otras páginas (botones "abrir").
Puede descargar el código fuente: receptor.java
y transmisor.java
Applets que se comunican
Tenemos dos applets:
public class receptor extends Applet {
....
}
public class transmisor extends Applet {
....
}
El applet "transmisor" envía un mensaje al applet "receptor" (¡y sin tener que manejar explicitamente shockets!).
Todo el meollo se encuentra en manejar el Contexto del applet. Código fuente:
String mensaje = texto.getText();
receptor receptor = (receptor) getAppletContext().getApplet( "applet_receptor" );
receptor.recibir_mensaje( mensaje );
Explicándolo paso a paso:
- Desde la clase transmisor obtenemos el contexto del receptor. ¿Cómo?
por medio de una llamada a getAppletContext() obtenemos un objeto de la clase AppletContext
- Desde el objeto de AppletContext obtenemos una referencia al applet receptor por medio de una llamada
a getApplet( String nombre_HTML_del_Applet ). No nos confundamos, la cadena que hay que poner no es el
nombre Java de la clase receptora, es decir, "receptor", sino el nombre que se le ha dado en la página HTML, es
decir, "applet_receptor". Véase el contenido de la etiqueta APPLET en la página HTML:
<applet
codebase = "."
code = "awt02_transmitir.receptor.class"
name = "applet_receptor"
....
> </applet>
Para más información puedes ver Lemay y Perkins (1996, pag. 298-299).
Cargar y mostrar una imagen
Como cargar una imagen:
URL url = new URL( getCodeBase(), "awt02_transmitir/imagen/buho.GIF" );
Image buho = Toolkit.getDefaultToolkit().getImage( url );
Este constructor de URL nos exige dos cosas:
- Una URL de la ruta de contexto o base, para lo cual usamos getCodeBase(), por medio de la cual
obtenemos la URL
del directorio indicado en la página HTML con el parámetro CODEBASE. Puesto que hemos puesto CODEBASE = ".",
hace referencia al directorio de la página. A continuación podemos ver dos ejemplos de getCodeBase(), en
el primero el applet se encuentra en local (protocolo "file") y en el segundo se encuentra en un servidor web
remoto (protocolo http):
file:/C:/DOC/Java/awt02_transmitir/class/
http://personal.telefonica.terra.es/web/rlagob/java/awt02_transmitir/class/
- Necesitamos una cadena (String) con la ruta relativa del archivo GIF. Lo que hace el constructor de URL es unir
la ruta de contexto y la ruta relativa.
¿Por qué hacerlo así? Sólo tenemos que especificar una ruta relativa (en nuestro ejemplo
es "awt02_transmitir/imagen/buho.GIF").
Al applet muestra otra página en su navegador
El applet hace que el navegador salte a otra página de forma muy sencilla, primero obtenemos la URL que queremos
abrir y después, por medio de un AppletContext, mostramos la URL con showDocument( URL ):
URL url = new URL( "http://www.elmundo.es" ); // Crea URL
getAppletContext().showDocument( url ); // Abre URL