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