Gli applet finalmente!

Scrivere un programma che faccia uso di mouse,grafica,etc come un applet e' ancora piu' difficile. Bisogna conoscere le librerie di classi disponibili e quali sono le classi che vanno usate o modificate e quali metodi saranno usati dal "sistema" per comunicare col vostro programma.
Inoltre un messaggio puo' essere inviato anche dall'utente tramite un evento come cliccare col mouse e bisogna conoscere tutti gli eventi e come devono essere trattati nel programma.Un evento,in Java, e' un oggetto ed esso e' associato a due altri oggetti:l'oggetto source(sorgente) che genera l'evento e l'oggetto listener che tratta l'evento. Gli oggetti grafici di AWT possono essere sorgente di una serie di eventi,ognuno dei quali e' caratterizzato da un nome.Ad esempio l'oggetto Button puo' generare gli eventi Action ,Focus,Key,Mouse e Component. Listener puo' essere invece una qualsiasi classe:basta che inizi con :
Class PincoPallino implements TipoeventoListener... 
Si dice in gergo che essa implementa l'interfaccia TipoeventoListener, nel senso che contiene delle (ri)definizioni di una serie di metodi predefiniti per trattare un certo tipo di evento.Quindi e' importante conoscere i nomi degli eventi e dei metodi ad essi associati.

Ad esempio per scrivere il classico CiaoATutti sotto forma di applet dobbiamo sapere che:

  1. Il browser si aspetta che gli scriviate una classe modificando quella di libreria chiamata "JApplet"
  2. Il disegno all'interno dell'applet deve essere fatto in una classe che modifica "JPanel"
  3. Il metodo init dell'applet deve creare il JPanel e definirlo come "contentPane" dell'applet
  4. Per dipingere il contenuto dell'applet il browser chiama il metodo(routine) paintComponent della classe che modifica il JPanel che va percio' ridefinita.
  5. La classe "Graphics" permette di disegnare definendo un "contesto grafico" con metodi come drawString etc.

import java.awt.*;
import javax.swing.*;
public class CiaoATutti1 extends JApplet {

 Display disegno;
 
 public void init(){
  disegno = new Display();  
  setContentPane(disegno);
 }
class Display extends JPanel {
 public void paintComponent(Graphics g){
   g.drawString("CiaoATutti",5,25);
  }
 }
 }

Una semplicissima interazione come una scritta che segue il mouse,richiede le seguenti conoscenze:
  1. Quando l'utente fa "qualcosa" il browser richiama un particolare metodo dell'oggetto listener per quell'evento.In questo caso "mouseMoved" dell'interfaccia "MouseMotionListener".
    Ma perche' questo accada sono necessarie 3 cose:
    1. L'oggetto "listener" deve essere aggiunto alla lista di listener nell'oggetto che genera l'evento usando il metodo addTipoeventoListener.
    2. La classe di oggetti "listener" deve implementare l'interfaccia "TipoeventoListener".
    3. Tutti i metodi dell'interfaccia devono essere ridefiniti:non solo quello che serve.
  2. Le informazioni su cosa e' successo sono passate alla routine attraverso un oggetto Tipoevento (in questo caso MouseEvent).
  3. Per aggiornare il disegno nella finestra occorre chiamare repaint() ; non paint() ! che puo' essere chiamata solo dal browser .
  4. Prima che il JPanel dell'applet sia disegnato da paintComponent() ,il browser richiama una routine init() dove possiamo inizializzare le nostre variabili e fare un primo disegno dell'applet.
  5. Possiamo ottenere le dimensioni dell'applet con getSize().width e getSize.height

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Mousedemo extends JApplet implements MouseMotionListener{

 Display disegno;
 
 int mousex , mousey;

 public void init(){
   mousex=0;
   mousey=getSize().height - 20;
   disegno = new Display();  
   setContentPane(disegno);
   disegno.addMouseMotionListener(this);
   disegno.repaint();
   }
 public void mouseMoved(MouseEvent e){
    mousex = e.getX();
    mousey = e.getY();
    disegno.repaint();
    }
 public void mouseDragged(MouseEvent e){
    }
 class Display extends JPanel {
 public void paintComponent(Graphics g){
   g.setColor(Color.white);
   int width =  getSize().width;
   int height = getSize().height;
   g.fillRect(0,0,width,height);

   g.setColor(Color.black);  
    g.drawString("CiaoATutti",mousex,mousey);
    }
 }
 }



Sempre piu' difficile!Ora aggiungiamo un tasto che quando viene pigiato fa riscrivere la scritta in un colore scelto a caso.
  1. Viene fornita una classe Button. Button("scritta") permette di crearlo con una scritta.
  2. actionPerformed(ActionEvent e) di ActionListener puo' essere usata per rispondere al tasto .
  3. Possiamo usare il metodo add(oggetto) per aggiungere nella finestra dell'applet il tasto.
  4. Per definire i colori esiste un oggetto Color e vari metodi come g.setColor.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Pigiami extends JApplet implements ActionListener{
  Display disegno;
  JButton tasto;
  Color colore;

  public void init(){
     disegno = new Display();  
     setContentPane(disegno);
     disegno.add(tasto = new JButton("pigiami!"));
     tasto.addActionListener(this);
     colore = new Color(0,0,0);
     disegno.repaint();
     }
  public void actionPerformed(ActionEvent e){
     colore = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
        disegno.repaint();
        }
class Display extends JPanel {
  public void paintComponent(Graphics g){
        g.setColor(Color.white);
        int width =  getSize().width;   
        int height = getSize().height; 
        g.fillRect(0,0,width,height);

        g.setColor(colore);
        g.drawString("CiaoATutti",20,50);
       }
 }
 }




Questa pagina e' stata aggiornata all'sdk 1.3 . Qui la versione per Java 1.1 e per java 1.0.2 .
INDIETRO a Imparate Java in un'ora
Maintained by Giuseppe Zito.Last revised