¡Por fin un poco de color! Primero la definición: Un Applet es un pequeño programa que está orientado a la Interfaz Gráfica de Usuario y que normalmente se ejecuta dentro de un navegador web. Hasta ahora hemos estado haciendo programas de linea de comandos. Ahora, gracias a las clases Awt y swing ya podemos hacer chorradas graficas.
Las dos características principales son:
1. no te puedes salir de la memória. Nada de lo que hagas puede salir del marco del navegador web o la ventana donde se ejecute. Olvidate de llamadas al sistema, disco o lo que sea 2. Al ser ejecutado dentro del navegador… no requiere instalación. Tu lo haces, lo complilas, lo pruebas (*) y si funciona … a correr. funciona en todas partes.
(*) Para probarlos: Son aplicaciones que se ejecutan dentro de un navegador web. Por lo que hay una página web que los llama. Normalmente con este código: <applet code=nombre de la clase width=tamaño height = altura > </applet>. Puede que haya navegadores que no lo soporten. Si ese es tu caso, simplemente actualiza tu navegador. Una vez que has colocado tu html y tu applet en tu servidor web lo llamas desde un ordenador limpio. ya que puede darse el caso de que lo ejecutes desde el mismo ordenador desde donde lo has compilado y el applet no esté en la ruta correcta en el servidor pero si en tu ordenador por lo que java ejecutará el applet local. Como resultado Tu si que lo verás. Pero el resto del mundo no. Otra opción es la de borrar los .class locales.
Los applets son hijos de la clase JApplet. Todo applet extiende JApplet. Esto nos permite tener ya mucho trabajo hecho y tener un marco de trabajo estable. Cuando un applet es ejecutado dentro de una web, el navegador llama a estos cuatro métodos
Una vez que ya sabes todo esto … vamos a empezar…. ¡Tu primer Applet!
Aqui tienes tu “hola mundo”:
// PrimerApplet.java
// Tu primer applet
import javax.swing.*;
import java.awt.*;
public class PrimerApplet extends JApplet{
public void init(){
getContentPane().add( new JLabel("Hola Mundo") );
}
}
Y este es el html:
<html> <head> </head> <body> <applet code=PrimerApplet width=100 height=50> </applet> </body>
Fíjate que el método init() es el responsable de pintar los componentes. Pero los componentes no se pintan en la nada. Se pintan en un contenido. Por eso se debe llamar a getContentPane() para posteriormente ir añadiendo componentes. con add().
Pero es un rollo tener que subir siempre los applets y hacer el html. Por eso vamos a hacer una clase que nos permita ejecutar los applets desde linea de comandos. Cuando se ejectua un applet se llama a init() pero cuando se ejecuta en linea de comandos se ejecuta main() por lo que haciendo un conector tendremos el tema solucionado. Es una copia de la clase de Bruce Eckel de su libro Piensa en Java aunque yo la he cambiao el nombre al paquete.
Si creamos esta clase:
//net.juantxu.swing.Console.java
//Herramienta para poder ejecutar applets desde consola
package net.juantxu.swing;
import javax.swing.*;
import java.awt.event.*;
public class Console{
// Crear un string titulo a partir del nombre de la clase:
public static String titulo(Object o){
String t = o.getClass().toString();
// borramos la palablra "class"
if(t.indexOf("class") != -1){ t=t.substring(6); }
return t;
}
public static void
run(JFrame frame, int width, int height){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setVisible(true);
}
public static void
run(JApplet applet, int width, int height){
JFrame frame = new JFrame(titulo(applet));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(applet);
frame.setSize(width, height);
applet.init();
applet.start();
frame.setVisible(true);
}
public static void
run(JPanel panel, int width, int height){
JFrame frame = new JFrame(titulo(panel));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(panel);
frame.setSize(width, height);
frame.setVisible(true);
}
}
Y creamos un método main de este estilo:
//Applet1b.java
// Estas lineas son para poder ejecutar en linea de comandos
// <applet code=Applet1b width=100 height=100>
// </applet>
import javax.swing.*;
import java.awt.*;
import net.juantxu.swing.*;
public class Applet1b extends JApplet{
public void init(){
getContentPane().add( new JLabel("hola mundo") );
}
// el main es el que permite la ejecucion tambien desde la linea de comandos
public static void main(String[] args){
Console.run(new Applet1b(), 1000, 1000);
}
}
ya lo tenemos todo solucionado. fijate que tenemos que poner el código que llama al appplet al principio en un comentario.