import java.applet.*;
import java.awt.*;
// Un poco radical, pero por el momento vale. ¡Todo para dentro!
// Heredando echaré de menos los :
// -------
public class Beltran1 extends Applet implements Runnable
{
Thread m_Beltran1 = null;
private Graphics m_Graphics;
private Image m_Image;
private Image m_Fondo;
private int m_nImgWidth = 0;
private int m_nImgHeight = 0;
private boolean m_fAllLoaded = false;
private int m_cordx = -400;
// Un constructor que no hace nada
public Beltran1(){}
// Esto es para saber quien ha hecho el applet osease yo
// Y con qué, osease Visual J++ beta que me han mandado
// muy amablemente los amigos de Microsoft. Thanks Dave
public String getAppletInfo()
{
return "Name: Beltran1\r\n" +
"Author: Beltrán Rubio de Hita\r\n" +
"Created with Microsoft Visual J++ Version 1.0";
}
// Lo del inglés es una concesión (una más) al idioma imperial
// Este es el metodo de inicio que se llama cuando se carga un applet por
// primera vez o se recarga. Aquí se suelen incializar las estructuras de
// datos, se cargan las imágenes o los fonts, se crean las ventanas o se
// añaden UIs y seguro que se me ha olvidado algo
public void init()
{
resize(300, 100);
// Y esto es todo amigos... ¿qué se puede esperar de un applet
// tan simplón?. Sólo define el tamaño del applet
}
public void destroy()
{
// Nada que destruir en Java no hay deletes, ¡ADIOS A LA TRISTEZA!
// y no hay por lo pronto ninguno otra cosa que limpiar.
}
// El método imageUpdate es llamado repetidamente por AWT mientras que se
// construyen las imágenes. Los flags proporcionan información sobre el
// estado de las imágenes en construcción. Cuando ALLBITS está activado,
// el método sabe cuando una imagen está completamente cargada. Cuando están
// todas cargadas ponemos m_fAllLoaded a true y la animación puede comenzar
public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
{
// Si todas las imágenes están cargadas nos vamos con la música a otra parte
//--------------------------------------------------------------------------
if (m_fAllLoaded)
return false;
// Todos los bits tienen que estar cargados antes de empezar al dibujar
//----------------------------------------------------------------------
if ((flags & ALLBITS) == 0)
m_fAllLoaded = true;
return true;
}
// Dibuja la siguiente imagen si todas las imágenes están cargadas
//--------------------------------------------------------------------------
private void displayImage(Graphics g)
{
if (!m_fAllLoaded)
return;
g.clearRect(0, 0, 300, 100);
g.drawImage(m_Image, m_cordx, 0, null);
}
// El manipuladeor de pintado de Beltran1
//--------------------------------------------------------------------------
public void paint(Graphics g)
{
setBackground(Color.white);
// Esto es para poner un mensajito mientras se cargan las imágenes para
// que el espectador no se aburra y diga: mira está pasando algo.
//----------------------------------------------------------------------
if (m_fAllLoaded)
{
displayImage(g);
}
else
g.drawString("Espera mientras se cargan la imágen", 10, 20);
}
// start() es el método que se llama cuando la página se carga por primera
// vez en la pantalla.
//--------------------------------------------------------------------------
public void start()
{
if (m_Beltran1 == null)
{
m_Beltran1 = new Thread(this);
m_Beltran1.start();
}
}
// El stop() es obvio
//--------------------------------------------------------------------------
public void stop()
{
if (m_Beltran1 != null)
{
m_Beltran1.stop();
m_Beltran1 = null;
}
}
// El método run() se llama cuando la tarea del applet comienza.
// si tu applet realiza trabajos sin esperar que el usuario haga
// algo, es el momento de hacerlo. En este caso de una animación
// se controla la visualización de las imágenes
public void run()
{
m_Graphics = getGraphics();
// Carga todas las imágenes
//----------------------------------------------------------------------
m_Image = getImage(getDocumentBase(), "a10.gif");
// Cogemos la anchura y la altura de una imagen asumiendo que todas
// son iguales
//------------------------------------------------------------------
if (m_nImgWidth == 0)
{
try // esto del try me encanta
{
while ((m_nImgWidth = m_Image.getWidth(null)) < 0)
Thread.sleep(1);
while ((m_nImgHeight = m_Image.getHeight(null)) < 0)
Thread.sleep(1);
}
catch (InterruptedException e)
{
//
// Aquí la manipulación de excepciones, corramos un tupido velo
// por el momento
//
}
// Con esto forzamos a que la imagen se carge del todo
//------------------------------------------------------------------
m_Graphics.drawImage(m_Image, -1000, -1000, this);
}
// Esperando a que se cargen todas las imágenes
//----------------------------------------------------------------------
while (!m_fAllLoaded)
{
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
}
}
repaint();
while (true)
{
try
{
displayImage(m_Graphics);
m_cordx += 20;
if (m_cordx == 420)
m_cordx = -400;
Thread.sleep(100);
}
catch (InterruptedException e)
{
stop();
}
}
}
}
// y este es el esqueleto completo de esos divertidos applets
               (
geocities.com/siliconvalley)