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:
- Il browser si aspetta che gli scriviate una classe modificando quella di libreria
chiamata "JApplet"
- Il disegno all'interno dell'applet deve essere fatto in una classe che
modifica "JPanel"
- Il metodo init dell'applet deve creare il JPanel e definirlo come
"contentPane" dell'applet
- Per dipingere il contenuto dell'applet il browser chiama il metodo(routine)
paintComponent della classe che modifica il JPanel che va percio' ridefinita.
- 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:
- 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:
- L'oggetto "listener" deve essere aggiunto alla lista di listener
nell'oggetto che genera l'evento usando il metodo addTipoeventoListener.
- La classe di oggetti "listener" deve implementare l'interfaccia "TipoeventoListener".
- Tutti i metodi dell'interfaccia devono essere ridefiniti:non solo quello che serve.
- Le informazioni su cosa e' successo sono passate alla routine attraverso
un oggetto Tipoevento (in questo caso MouseEvent).
- Per aggiornare il disegno nella finestra occorre chiamare repaint() ;
non paint() ! che puo' essere chiamata solo dal browser .
- 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.
- 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.
- Viene fornita una classe Button. Button("scritta") permette di crearlo
con una scritta.
- actionPerformed(ActionEvent e) di ActionListener puo' essere usata per rispondere al tasto .
- Possiamo usare il metodo add(oggetto) per aggiungere nella finestra dell'applet il tasto.
- 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