Le Applet JAVA
La classe Applet è contenuta nel package java.applet.Applet e quindi ogni applet scritta è una sottoclasse di
Applet. Questa classe si basa, per il rendering a video della classe AWT (Abstraction Window Toolkit).
Per compilare una Applet è necessario che sia installata la JDK, mentre l'esecusione avviene nel browser e
non dal Java RunTime.
L'inclusione di una applet in una pagina HTML avviene semplicemente specificando:
<applet code=”EsempioApplet” width=300 height=100></applet>
Nelle Applet viene utilizzato un gestore di eventi in quanto tutte le azioni di un'applet per essere richiamate si
utilizzano eventi.
Vi sono 5 metodi fondamentali all'interno di un'applet:
init(), start(), stop(), destroy() e paint(), quindi il seguente esempio ne mostra l'utilizzo:
import java.awt.*; // importa la classe delle windows abstraction toolkit
import java.applet.*; // importa la classe applet
public class ProvaApplet extends Applet
{
/* Questo metodo viene richiamato al lancio dell'applet, ed è usato una sola volta nella vita dell'applet, qui si
instanziano variabili, ecc */
public void init()
{}
/* Questo metodo viene chiamato dopo il metodo init() e anche quando l'applet viene riavviata (ovvero anche
in fase di reload di una pagina HTML */
public void start()
{}
/* Questo metodo viene chiamato quando l'applet viene fermata definitivamente o quando si lascia la pagina
HTML dove l'applet è contenuta */
public void stop()
{}
/* Questo metodo è chiamato quando l'applet è terminata. Questo è l'ultimo metodo eseguito e tutto viene
rimosso dalla memoria */
public void destroy()
{}
/* Questo metodo è chiamato ogni qualvolta la finestra deve essere ridisegnata a video, flickering ed altro
possono avvenire se il metodo è troppo lento */
public void paint(Graphics g)
{}
/* qui vediamo il metodo accessorio update() che ridisegna la finestra nei contenuti modificati */
public void update(Graphics g)
{}
}
Vediamo ora una breve descrizione dei metodi comuni utilizzati in un'applet:
void drawString(String message, int x, int y)
metodo per scrivere una stringa nell'area di visualizzazione dell'applet
void setBackground(Color colore)
void setForeground(Color colore)
Servono rispettivamente per impostare il colore dello sfondo e del testo
Color getBackground()
Color getForeground()
Servono rispettivamente per reperire il colore dello sfondo e del testo
void repaint()
void repaint(int left, int top, int width, int height)
Servono rispettivamente per ridisegnare, tutta la finestra, una regione specifica.
Passaggio di parametri all'applet
Un'applet può ricevere parametri spediti da una pagina HTML tramite l'invocazione del metodo string
getParameter(nome_del_parametro). I parametri se non valorizzati restituiscono un valore NULL e quindi
questa eventualità deve essere sempre gestita come nel seguente esempio:
... ... ...
String variabile;
variabile = getParameter(“parametro”);
if (variabile != null)
... ... ...
Gestione degli eventi
Il package che si occupa della gestione degli eventi per le applet è java.awt.event; quando l'utente fa click
con il mouse sulla finestra dell'applet oppure quando digita caratteri da tastiera mentre la finestra dell'applet
è attiva, si dice che viene generato un evento.
In Java 2 un evento viene ricevuto da listeners che si adoperano per gestirlo secondo le volontà del
programmatore; la superclasse di tutti gli eventi è EventObject(Object).
Nel seguente esempio (ripreso da Java2 di H. Schildt) viene riportato il codice sorgente per la gestione dei
movimenti del mouse sulla finestra dell'applet:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
/*
<applet code="MouseEvents" width=300 height=100>
</applet>
*/
public class MouseEvents extends Applet implements MouseListener,
MouseMotionListener {
String msg = "";
int mouseX = 0, mouseY = 0; // coordinates of mouse
public void init()
{
addMouseListener(this);
addMouseMotionListener(this);
}
// Handle mouse clicked.
public void mouseClicked(MouseEvent me)
{
// save coordinates
mouseX = 0;
mouseY = 10;
msg = "Mouse clicked.";
repaint();
}
// Handle mouse entered.
public void mouseEntered(MouseEvent me)
{
// save coordinates
mouseX = 0;
mouseY = 10;
msg = "Mouse entered.";
repaint();
}
// Handle mouse exited.
public void mouseExited(MouseEvent me)
{
// save coordinates
mouseX = 0;
mouseY = 10;
msg = "Mouse exited.";
repaint();
}
// Handle button pressed.
public void mousePressed(MouseEvent me)
{
// save coordinates
mouseX = me.getX();
mouseY = me.getY();
msg = "Coordinate correnti: " + mouseX + "," + mouseY;
repaint();
}
// Handle button released.
public void mouseReleased(MouseEvent me)
{
// save coordinates
mouseX = me.getX();
mouseY = me.getY();
msg = "Coordinate correnti: " + mouseX + "," + mouseY;
repaint();
}
// Handle mouse dragged.
public void mouseDragged(MouseEvent me)
{
// save coordinates
mouseX = me.getX();
mouseY = me.getY();
msg = "Dragging mouse";
msg = mouseX + "," + mouseY;
showStatus("Dragging mouse at " + mouseX + ", " + mouseY);
repaint();
}
// Handle mouse moved.
public void mouseMoved(MouseEvent me)
{
// show status
showStatus("Moving mouse at " + me.getX() + ", " + me.getY());
}
// Display msg in applet window at current X,Y location.
public void paint(Graphics g)
{g.drawString(msg, mouseX, mouseY);}
}
Osserviamo ogni metodo implementato nella classe:
Nel metodo init() vengono registrati due listener: il mouse generico e l'azione di movimento del mouse.
Nei metodi mouseClicked, mouseEntered e mouseExited vengono: reimpostate le coordinate dove il
messaggio deve essere stampato, impostato il testo del messaggio ed invocato il metodo di ridisegno
della finestra.
Nei metodi mouseReleased, mousePressed e mouseDragged le coordinate vengono lette in modo che il
messaggio venga stampato nella posizione corrente del mouse.
Il metodo showStatus(String) viene usato per scrivere informazioni nella status bar dello User Agent
Se nella classe appena scritta si fosse voluto gestire l'attivita di I/O da tastiera, si sarebbe implementato il
KeyListener ed implementati i metodi keyPressed, keyRealeased e keyTyped.
Disegnare con le applet