Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che,...

66
Applet Un applet o un’applet?

Transcript of Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che,...

Page 1: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

Applet

Un applet o un’applet?

Page 2: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

2

Introduzione Gli applet sono una tipologia di programmi Java

che, a differenza delle applicazioni Java, sono realizzati non per essere eseguiti autonomamente, ma piuttosto per essere immersi in altre applicazioni.in particolare, gli applet possono essere immersi in pagine web ed eseguiti da browser web

Page 3: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

3

Introduzione Un applet è un (piccolo) programma realizzato

per essere immerso (ovvero, eseguito) nell’ambito di un’altra applicazione gli applet sono solitamente immersi nelle pagine web

(nei documenti HTML) i principali browser web sono dotati di una macchina

virtuale Java e sono in grado di eseguire applet se una pagina web contiene un applet, un’area della

pagina è dedicata alla visualizzazione dell’applet Per realizzare applet è utile comprenderne le

caratteristiche principali, ed in particolare l’interazione tra applet e i browser web che li eseguono

Page 4: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

4

Un esempio

Questa è la definizione di un semplice applet che visualizza una frase (nell’area della pagina web dedicata alla sua visualizzazione) per realizzare un applet è necessario definire una classe

che estende la classe Applet (del package java.applet) la classe che implementa un applet non contiene il metodo

di classe void main(String[] args) (che va definito per le classi applicazioni) ma alcuni metodi d’istanza

import java.applet.Applet;import java.awt.Graphics;/** Applet che visualizza una frase. */public class AppletScrittore extends Applet { public void paint(Graphics g) {

g.drawString("Il mio primo applet", 25, 50); }}

Page 5: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

5

La classe Applet In generale, un applet è un oggetto istanza di

tipo Applet la classe Applet del package java.applet è un

applet elementare, che apparentemente non fa nulla

per realizzare un nuovo applet è necessario estendere la classe Applet per aggiungere comportamento all’applet elementare

Page 6: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

6

La classe Applet In pratica, nella classe Applet sono definiti i metodi

con cui i browser web (o meglio, le macchine virtuali Java di cui i browser web sono dotati) possono interagire con un applet, e che vanno eventualmente ridefiniti per descrivere che cosa deve fare l’applet

ad esempio, quando un browser web deve eseguire un applet, per prima cosa istanzia l’applet e, prima o poi, gli chiede di eseguire il metodo paint(...)

il metodo paint(...) viene invocato ed eseguito ogni volta che è necessario visualizzare o aggiornare l’area dedicata alla visualizzazione dell’applet

questo avviene, ad esempio, nel momento in cui il browser web deve visualizzare l’applet

per default, il metodo paint(...) (di Applet) non fa nulla tuttavia, è possibile ridefinire il comportamento del metodo paint(...) per far visualizzare qualcosa all’applet

Page 7: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

7

La classe Applet

Page 8: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

8

La classe Applet

Page 9: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

9

La classe Applet

Page 10: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

10

Applet e pagine web Come si interagisce con un applet?

una pagina web può contenere un applet, se nella pagina è specificato, mediante un elemento APPLET, il nome della classe che definisce l’applet

in questo caso, il browser web scarica il bytecode della classe che è stata specificata istanzia un nuovo oggetto da questa classe richiede a questo oggetto di eseguire alcuni metodi, in un

modo che dipende da come l’utente del browser interagisce con il browser

Page 11: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

11

Applet e pagine web Per indicare la presenza di un applet in una pagina web va

usato l’elemento APPLET, come nel seguente esempio<HTML><HEAD><TITLE>L'applet scrittore</TITLE></HEAD><BODY><APPLET CODE=“AppletScrittore.class” WIDTH=300 HEIGHT=100></APPLET></BODY></HTML>

un ruolo fondamentale della pagina web che contiene un applet è quello di assegnare all’applet un’area rettangolare dedicata alla visualizzazione dell’applet

in particolare, un elemento APPLET deve contenere almeno

un attributo CODE che specifica il nome dell’applet gli attributi WIDTH e HEIGHT che specificano, rispettivamente, la

larghezza e l’altezza dell’area dedicata all’applet

Page 12: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

12

Il metodo Paint Gli oggetti istanza della classe Graphics (del

package java.awt) modellano oggetti grafici, ovvero oggetti che sono in grado di eseguire operazioni di disegno

normalmente, un oggetto Graphics è associato a un oggetto con capacità grafiche (come ad esempio a un applet) ed è chiamato un contesto grafico dell’oggetto a cui è associato

Quando il browser richiede a un applet di eseguire il metodo void paint(Graphics g)

gli passa come parametro il riferimento al contesto grafico g associato all’applet

il metodo paint contiene normalmente istruzioni che richiedono a g di disegnare o di visualizzare stringhe, al fine di visualizzare lo stato corrente dell’applet

Page 13: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

13

Il metodo Paint Al contesto grafico è associata un’area rettangolare:

XY

Page 14: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

14

Metodi della classe Graphics Ecco alcuni metodi della classe Graphics

void drawLine (int x1, int y1, int x2, int y2) disegna una linea tra i punti (x1, y1) e (x2, y2)

void drawRect (int x, int y, int w, int h) disegna il contorno di un rettangolo con estremo in alto a sinistra

nel punto (x, y), larghezza w+1 e altezza h+1 l’estremo in basso a destra del rettangolo avrà coordinate (x+w, y+h)

void fillRect (int x, int y, int w, int h) disegna un rettangolo (pieno) con estremo in alto a sinistra nel

punto (x, y), larghezza w e altezza h l’estremo in basso a destra del rettangolo avrà coordinate (x+w–1, y+h–1)

void drawString (String s, int x, int y) visualizza la stringa s — la base (in basso a sinistra) della stringa

è posta nel punto di coordinate (x, y) void drawOval (int x, int y, int w, int h)

disegna il contorno di un ovale contenuto nel rettangolo con estremo in alto a sinistra nel punto (x, y), larghezza w+1 e altezza h+1

Page 15: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

15

Metodi della classe Graphics void fillOval (int x, int y, int w, int h)

disegna un ovale (pieno) contenuto nel rettangolo con estremo in alto a sinistra nel punto (x, y), larghezza w e altezza h

void drawPolyline (int[] xP, int[] yP, int nP) disegna una linea spezzata (aperta) composta da nP punti di

coordinate rispettivamente (xP[0], yP[0]), (xP[1], yP[1]),..., (xP[nP–1], yP[nP–1])

void drawPolyline (int[] xP, int[] yP, int nP) disegna una linea spezzata (chiusa) composta da nP punti di

coordinate (xP[0], yP[0]), ...,(xP[nP–1], yP[nP–1]) void setColor (Color c)

modifica il colore delle successive attività di disegno

Page 16: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

16

Un esempioimport java.applet.Applet;import java.awt.Color;import java.awt.Graphics;/* Applet che disegna una casetta (in un'area 300x300 punti) */public class AppletDisegnatore extends Applet { public void paint(Graphics g) {

setBackground(Color.yellow); g.setColor(Color.blue); /* il colore delle linee è blu */

g.drawRect(50, 125, 200, 125); /* disegna il corpo */g.drawLine(50, 125, 150, 50); /* disegna il tetto */g.drawLine(250, 125, 150, 50);/* disegna un abbaino */g.drawOval(135, 80, 30, 30);/* disegna la porta */

g.drawRect(125, 175, 50, 75); g.setColor(Color.red);g.fillRect(126, 176, 49, 74);

}}

Page 17: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

17

La classe JApplet Il linguaggio Java permette la definizione di applet oltre che

AWT anche come classe JApplet (del package javax.swing) è una versione estesa della classe Applet, in grado di supportare

componenti Swing la classe JApplet estende la classe Applet

Il seguente esempio illustra la definizione di un JAppletimport javax.swing.JApplet;

import java.awt.Graphics;

/** Applet (Swing) che visualizza una frase. */

public class AppletScrittoreSwing extends JApplet {

/* Visualizza una frase. */

public void paint(Graphics g) {

g.drawString("Il mio primo applet Swing", 25, 50);

}

}

non tutti i browser web supportano gli applet Swing

Page 18: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

18

Ciclo di vita di un Applet Un applet è un oggetto, che vive in (cioè viene

eseguito da) una macchina virtuale Java di un browser web passando attraverso varie fasi:

inizializzazione public void init() quando il browser deve visualizzare un applet, ne scarica il

bytecode della classe (che deve estendere la classe Applet), crea un oggetto da questa classe e gli chiede di inizializzare il proprio stato; l’inizializzazione avviene una sola volta nella vita di un applet

avvio public void start() subito dopo la creazione e l’inizializzazione, viene avviata

l’esecuzione dell’applet se la pagina contenente l’applet viene lasciata e poi viene nuovamente visitata (perché viene visitata un’altra pagina, oppure perché la pagina viene iconizzata e poi deiconizzata), l’esecuzione dell’applet viene nuovamente riavviata (ma l’applet non viene ri-inizializzato)

Page 19: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

19

Ciclo di vita di un Applet arresto public void stop()

l’esecuzione di un applet viene arrestata quando la pagina viene lasciata (perché viene visitata un’altra pagina, oppure il browser viene iconizzato oppure chiuso)

distruzione public void destroy() un applet viene distrutto quando il browser viene chiuso (la

distruzione di un applet segue l’arresto della sua esecuzione)

Page 20: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

20

Ciclo di vita di un Applet In corrispondenza ai vari passaggi di stato dell’applet

vengono eseguiti i metodi init(), start(), stop() e destroy().

In particolare il metodo init() viene usato per inizializzare l’applet; normalmente si occupa dell’inizializzazione dello stato (delle variabili d’istanza) dell’oggetto applet, anche mediante la creazione di altri oggetti eventualmente utilizzati dall’applet (ad esempio, di altri componenti grafici)

Poiché per gli applet non sono previsti costruttori l’inizializzazione avviene di solito nell’ambito del metodo init()

Il metodo start() descrive le azioni che devono essere svolte dall’applet e si cura della gestione degli oggetti creati dal metodo init()

Spesso, il metodo start() deve semplicemente avviare dei nuovi thread di esecuzione

Della visualizzazione degli oggetti si occupa il metodo paint(...)

Page 21: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

21

Un esempioQuesto è HTML

Questa è l’applet

import java.applet.*;import java.awt.*;import java.awt.event.*;import java.text.*;public class Convertitore extends Applet implements ActionListener {

private final double fattoreDiConversione=1936.27;private TextField t;private Checkbox lire, euro;private Button b;

public void init() {//Gestore della disposizionesetLayout(new BorderLayout());setBackground(Color.white);//Campo di testo: valore da convertiret=new TextField("");

Page 22: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

22

Un esempio//Bottone: richiede la conversioneb=new Button("Converti");//registrazione del bottone come “ascoltatore” b.addActionListener(this);//Costruzione del selettore di valuta//cbg serve a garantire la mutua esclusioneCheckboxGroup cbg= new CheckboxGroup();//due checkbox, appartenenti al gruppo cbg//la prima inizialmente selezionatalire= new Checkbox("£",true,cbg);//la seconda noeuro= new Checkbox("Euro",false,cbg);//Raggruppa alcuni componentiPanel p = new Panel();p.add(lire);p.add(euro);p.add(b);//aggiungi il campo di testo in alto add(t,"North");//aggiungi il pannello in basso add(p,"South");

}

Page 23: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

23

Un esempio//Viene chiamato ogni volta in cui si preme il bottone public void actionPerformed(ActionEvent e) {

String valore=t.getText(); //leggi il campo di testo double d;try { //trasforma la scritta in numero

d=NumberFormat.getInstance().parse(valore).doubleValue();} catch (ParseException nfe) { //in caso di errore d=0.0;}if (lire.getState()) { //Valuta corrente in lire d=d/fattoreDiConversione; euro.setState(true); //Cambia il tipo di valuta}else { //Valuta corrente in euro

d=d*fattoreDiConversione; lire.setState(true); //Cambia il tipo di valuta}//Converti d in una stringa e la visualizzat.setText(NumberFormat.getInstance().format(d));

}}

Page 24: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

24

Un esempioIn generale un applet che ha bottoni e gestisce eventi ha la seguente struttura:

import java.applet.*;import java.awt.*;import java.awt.event.*;…public class NomeClasse extends Applet implements ActionListener { … private Button b; … public void init() { // definizione del layout, aggiunta di bottoni, pannelli, ecc. } public void actionPerformed(ActionEvent e) { … }}

Page 25: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

25

Un esempio

La pagina HTML che conterrà l’applet è la seguente:

<html><body><center><h1>Conversione Lire/Euro</h1><applet code="Convertitore" width="180" height="80"></applet></center></body></html>

Page 26: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

26

JCreator e le applet

nuovo

Basic Java Applet

es.: AppletScrittore

es.: 4I1\applet

Page 27: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

27

JCreator e le applet

pagina HTMLinserimento dell’Applet

Page 28: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

28

JCreator e le applet

applet

creata automaticamente

Page 29: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

29

JCreator e le applet

1° compilare l’applet (si crea il file .class)

Page 30: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

30

JCreator e le applet

2° eseguire la pagina HTML

Page 31: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

31

JCreator e le appletViene aperta la finestra di comando e l’appletviewer nella quale è visualizzata solo l’applet.

P.s.: se si vuole vedere la pagina HTML si deve aprirla con un browser!!!

Page 32: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

32

JCreator e le appletUso corretto di Jcreator (Workspace e Project)1. Configure – Options – Directories: nella Default Project

Directory inserire la directory di lavoro della classe – Apply - OK

2. New – Workspaces: scegliere Workspace name (es. Applet) – OK

3. Selezionare il Workspace - New – Projects – Basic Java Applet: dare il Project name (es. AppletScrittore)

Viene così creata una struttura di directory:

• Applet contiene un file Applet.jcw (definizione del workspace)• AppletScrittore contiene un file AppletScrittore.jcp (definizione del

project) e AppletScrittore.java (il file sorgente)• classes contiene il file AppletScrittore.htm e (quando verrà creato)

AppletScrittore.class

Nome Workspace

Nome Project

Page 33: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

33

ESERCITAZIONE 1 Creare la propria directory di lavoro Definirla in JCreator come la Default Project Directory Creare in JCreator un Workspace (es. Applet) Creare in JCreator un nuovo progetto per ogni esercizio

Provare la prima Applet (AppletScrittore), utilizzando quella generica creata da Jcreator, modificandone il testo, la posizione del testo, la dimensione dell’applet, aggiungendo altri testi, ecc.

Realizzare l’AppletDisegnatore con un disegno a piacere, provando ad utilizzare diversi metodi di Paint(), diversi colori di sfondo, ecc.

Realizzare un applet a piacere, scelto tra le applicazioni già realizzate, che utilizzi bottoni, campi di testo, ecc.

Page 34: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

34

E’ possibile passare dei parametri dalla pagina HTML all’applet:

la pagina web che contiene un applet può specificare parametri per l’applet, mediante elementi PARAM

un applet può accedere ai parametri specificati dalla pagina web che lo contiene

un applet può accedere alle dimensioni dell’area dedicata alla sua visualizzazione dalla pagina web che lo contiene

Esempio (generico):<APPLET CODE=“AppletConParametri” WIDTH=200 HEIGHT=100>

<PARAM NAME=nomedelparametro VALUE=valoredelparametro>

</APPLET>

Un applet con parametri

Page 35: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

35

Un esempio di pagina HTML con due applet (anzi: due istanze di un applet) alle quali passa dei parametri:<HTML>

<HEAD>

<TITLE>Applet con parametri</TITLE>

</HEAD>

<BODY>

<P>Vengono create due istanze dell'applet AppletConParametri.</P>

<APPLET CODE="AppletConParametri.class“ WIDTH=200 HEIGHT=100>

<PARAM NAME=descrizione VALUE="Applet largo">

</APPLET>

<APPLET CODE="AppletConParametri.class“ WIDTH=100 HEIGHT=200>

<PARAM NAME=descrizione VALUE="Applet alto">

</APPLET>

</BODY>

</HTML>

Un applet con parametri

Page 36: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

36

Questa è l’applet:import java.awt.Graphics;

/* Applet che visualizza la sua descrizione (parametro della

* pagina HTML) in un rettangolo che ha le sue dimensioni. */

public class AppletConParametri extends Applet {

String desc; // descrizione dell'applet

int larg, alt; // larghezza e altezza dell'applet

public void init() {/* Inizializza l'applet. */

this.desc = this.getParameter("descrizione");

this.larg = this.getWidth();

this.alt = this.getHeight();

}

public void paint(Graphics g) {/* Visualizza la descrizione */

g.drawRect(0, 0, this.larg-1, this.alt-1);

g.drawString(desc, this.larg/2, this.alt/2);

}

}

Un applet con parametri

Acquisisce il valore del parametro

“descrizione”

Acquisiscono Width e Height

dell’applet

Page 37: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

37

Questo è il risultato:

Un applet con parametri

Page 38: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

38

L’applet può interagire con il “contesto”, cioè con l’ambiente del web browser, attraverso il metodo:

public AppletContext getAppletContext()ad esempio:

getAppletContext().showDocument(url)

sostituisce la pagina corrente del browser con quella indicata (url)

getAppletContext().showDocument(url,dove)

sostituisce la pagina corrente del frame (dove) (o nella finestra) con quella indicata (url)

getAppletContext().getAudioClip(url)scarica una clip audio (url)

getAppletContext().getImage(url)

scarica un’immagine (url)

Accesso al contesto

Page 39: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

39

Un esempioUn Applet che apre una pagina HTML:

import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.net.*;

public class ApriFinestra extends Applet implements ActionListener { Button b = new Button("Aprimi"); URL u; public void init() { try {u = new URL(getDocumentBase(),"ApriFinestra.htm");} catch (MalformedURLException e) {

System.out.println("URL errato"); } add(b); b.addActionListener(this); } public void actionPerformed(ActionEvent e) {

getAppletContext().showDocument(u,"_blank"); }}

Serve per l’URL

Indirizzo assoluto

target

Page 40: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

40

ESERCITAZIONE 2 Realizzare l’AppletConParametri, che usi i parametri

passategli dall’Html per definire le dimensioni e il testo (che deve essere centrato nell’applet); realizzare una pagina Html che richiami diverse volte lo stesso applet, con diverse dimensioni e testi. Eseguire con un browser la pagina Html realizzata.

Realizzare un applet che apra una nuova finestra del browser con un’altra pagina Html a piacere. Eseguire con un browser la pagina Html realizzata.

Realizzare una struttura a due Frame in Html; in un frame ci deve essere un applet che apra una nuova pagina nel secondo frame. Eseguire con un browser la pagina Html realizzata.

Page 41: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

41

ESERCITAZIONE 3 Realizzare un applet-menu per una struttura a Frame in Html; in

un frame ci deve essere una pagina Html con un applet che contenga diversi bottoni che aprano nuove pagine nel frame di destra. Creare le pagine Html relative. Eseguire con un browser la pagina Html realizzata.

Generalizzare l’applet-menu, rendendolo parametrico: dall’Html si deve poter passare come parametri il numero dei bottoni, le scritte sui bottoni, le pagine da caricare.

Far cambiare il colore al bottone corrispondente alla pagina che è stata aperta, disabilitarlo, rimettere il cursore normale.

Page 42: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

42

Swing o Awt?L’uso del pacchetto Swing per gli Applet presenta delle

differenze (e dei problemi) rispetto all’uso di Awt:• si deve importare Swing:

import javax.swing.*; • si estende un JApplet:

public class HelloSwing extends JApplet… • JApplet (di Swing) è una sottoclasse di Applet• non si può usare il metodo paint (ma se si importa

anche Awt è fattibile)• per aggiungere bottoni o altri componenti si deve

usare:getContentPane().add(btn);

(invece di add(btn))

Page 43: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

43

Swing o Awt?• non si può disegnare direttamente sulla JApplet,

ma si deve creare una classe apposita che contenga il paintComponent:

class Disegna extends JPanel {public void paintComponent(Graphics g) {

…}

} • la classe così creata va istanziata e aggiunta al

JApplet: Disegna areadisegno = new Disegna();setContentPane(area);

Page 44: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

44

Un esempio “Swing”import java.awt.*;import javax.swing.*;public class ScriviStringhe extends JApplet {

String message; Font[] font; Disegna area;

public void init() {message = “Sono un applet Java!";Font[] font = new Font[5];

font[0] = new Font("Serif", Font.BOLD, 14); font[1] = new Font("SansSerif", Font.BOLD + Font.ITALIC,

24); font[2] = new Font("Monospaced", Font.PLAIN, 20); font[3] = new Font("Dialog", Font.PLAIN, 30); font[4] = new Font("Serif", Font.ITALIC, 36); area = new Disegna(); area.setBackground(Color.black); setContentPane(area); }

Page 45: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

45

Un esempio “Swing”class Disegna extends JPanel {

public void paintComponent(Graphics g) { super.paintComponent(g); int width = getSize().width;

int height = getSize().height; for (int i = 0; i < 25; i++) {

int fontNum = (int)(5*Math.random()); g.setFont(font[fontNum]); float hue = (float)Math.random(); g.setColor( Color.getHSBColor(hue, 1.0F, 1.0F) ); int x,y; x = -50 + (int)(Math.random()*(width+40)); y = (int)(Math.random()*(height+20));

g.drawString(message,x,y); } } } }

Page 46: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

46

Repaint• Il metodo paint() (o paintComponent()) viene

eseguito automaticamente una volta sola all’avvio; se si vuole modificare qualche elemento del disegno è necessario rieseguirlo con il metodo repaint().

• Ovviamente in questo caso il disegno deve essere “parametrizzato” cioè si devono usare variabili il cui valore viene modificato, ad esempio da eventi (bottoni, ecc.)

Page 47: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

47

Un esempio di repaint()

import java.awt.*;import java.awt.event.*;import java.applet.Applet;

public class Ridisegna extends Applet implements ActionListener {

int numeroClick; TextField testo; String txt[] = new String[] {"rosso", "giallo", "blue", "ciano",

"verde", "arancione"}; Color col[]= new Color[] {Color.red, Color.yellow, Color.blue,

Color.cyan, Color.green, Color.orange}; Color cols[]= new Color[] {Color.yellow, Color.blue, Color.cyan,

Color.red, Color.gray, Color.black};

Quest’applet modifica il colore di sfondo, oltre al contenuto e al colore di un TextField, facendo click su di un bottone:

Page 48: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

48

Un esempio di repaint()public void init() {

numeroClick=0; Button bottone = new Button("Cambia");

add(bottone); testo = new TextField(txt[numeroClick],10);

add(testo); testo.setForeground(col[numeroClick]);

testo.setBackground(cols[numeroClick]);bottone.addActionListener(this);

}public void paint(Graphics g) {

setBackground(col[numeroClick]);}public void actionPerformed(ActionEvent e) {

numeroClick++; numeroClick=numeroClick%6;

testo.setText(txt[numeroClick]); setBackground(col[numeroClick]);

testo.setForeground(col[numeroClick]); testo.setBackground(cols[numeroClick]);

repaint();}

}

Page 49: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

49

ESERCITAZIONE 4 Provare l’esempio di repaint() Ridisegna. Realizzare altri applet che usano repaint per:

1. Modificare le dimensioni di un cerchio (con due bottoni “+” e “-” che ne aumentano e ne diminuiscono le dimensioni;

2. Spostare un oggetto grafico (ad esempio un testo, una label o un quadratino) in una posizione definita da due campi di testo (X e Y).

Page 50: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

50

paint(), repaint() e update()• L’istruzione repaint() apparentemente non fa altro

che richiamare la paint(); in realtà richiama update()

• La update() fa due cose:• pulisce lo schermo • esegue la paint()

• Se si vuole evitare di cancellare lo schermo (ad esempio per poter aggiungere oggetti senza ridisegnare tutto) si può ridefinire la update(), in modo che richiami solo la paint():

public void update(Graphics g){paint(g);

}• A questo punto la repaint()non ripulisce più lo

schermo

Page 51: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

51

MouseListener e MouseAdapter

• Per gestire gli eventi del mouse si può creare una classe di ascolto che estenda la MouseListener o la MouseMotionListener:Class AscoltatoreMouse implements MouseListener {

public void mousePressed(MouseEvent e) {}; public void mouseReleased(MouseEvent e) {}; public void mouseEntered(MouseEvent e) {}; public void mouseExited(MouseEvent e) {}; public void mouseClicked(MouseEvent e) {};

}Class AscoltatoreMovMouse implements

MouseMotionListener {public void mouseDragged(MouseEvent e) {}; public void mouseMoved(MouseEvent e) {};

}• Le classi così definite devono definire tutti i metodi

del mouse (anche se vuoti)

Page 52: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

52

MouseListener e MouseAdapter

• Ovviamente il metodo che interessa va implementato; ad esempio:

public void mousePressed(MouseEvent e) {X=e.getX();Y=e.getY();repaint();

}; • Esistono le classe MouseAdapter e

MouseMotionAdapter che possono essere estese e non è necessario definire tutti metodi:Class AscoltatoreMouse extends MouseAdapter {

public void mousePressed(MouseEvent e) {…

}; }

Page 53: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

53

MouseListener e MouseAdapter

• Le classi così create vanno ovviamente instanziate ed aggiunte all’applet; ad es.:AscoltatoreMouse am = new AscoltatoreMouse();addMouseListener(am);

• Per gli eventi della tastiera esistono KeyListener e KeyAdapter, vari metodi, ad es.: Public void keyPressed(KeyEvent e)

• KeyEvent ha il metodo getKeyCode() con il quale è possibile conoscere il tasto premuto

• Alcuni tasti sono definito da costanti. Ad esempio le frecce sono KeyEvent.VK_UP KeyEvent.VK_DOWN KeyEvent.VK_LEFT KeyEvent.VK_RIGHT

Page 54: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

54

Un esempioApplet che aggiunge un pallino ad ogni clic

import java.awt.*;import java.applet.*;import java.awt.event.*;public class Pallini extends Applet {

int X,Y;public void init() {

MioAscoltatoreMouse al = new MioAscoltatoreMouse();addMouseListener(al);

}public void paint(Graphics g) {

g.setColor(Color.red); g.fillOval(X,Y,10,10);}public void update(Graphics g){ paint(g); }private class MioAscoltatoreMouse extends MouseAdapter {

public void mousePressed(MouseEvent e){X=e.getX(); Y=e.getY();repaint();

}}

}

Page 55: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

55

ESERCITAZIONE 5

Provare l’applet Pallini L’applet disegna un pallino fin dall’inizio:

evitare che questo avvenga (ad es. usando un boolean…)

L’ultimo pallino inserito potrebbe essere spostato a mano con le frecce della tastiera

Aggiungere un mouseDragged che disegni il pallino in modo continuo finchè il bottone del mouse è premuto

Aggiungere un campo di testo nel quale inserire le dimensioni del pallino da disegnare

Page 56: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

56

Animazione• Molto spesso un applet viene utilizzata per

realizzare un’animazione• Le animazioni possono essere realizzate in diversi

modi, in genere utilizzando i Thread, cioè la possibilità esistente in Java di far partire dei processi contemporaneamente.

• Una soluzione semplificata è quella offerta dalla classe Timer del package Swing, che consente di eseguire un’azione in modo ripetitivo:int ritardo = 1000; //millisecondi ActionListener esecutore = new ActionListener() {

public void actionPerformed(ActionEvent evt) { //…azione da ripetere…

}}; Timer timer = new Timer(ritardo, esecutore);…timer.start();

Page 57: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

57

AnimazioneTimer ha diversi metodi, tra i quali:• start() lo fa partire• stop() lo fa terminare• isRunning() restituisce true il Timer è attivo, false

se non lo è • restart() lo fa ripartire• setDelay(int delay) ridefinisce il ritardo

          

Page 58: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

58

Un esempioimport java.awt.*;import java.awt.event.*;import java.applet.Applet;import javax.swing.*;

public class AnimaPallina extends Applet implements ActionListener {int x,y,i;Button bottone new Button("Via");int ritardo = 100; ActionListener esecutore = new ActionListener() {

public void actionPerformed(ActionEvent evt) {azioneTimer();

}};Timer timer = new Timer (ritardo, esecutore);public void init() {

add(bottone); bottone.addActionListener(this);

x=10;y=10;

}

Page 59: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

59

Un esempio public void actionPerformed(ActionEvent e) {

timer.start();}

public void paint(Graphics g) {g.setColor(Color.red);g.fillOval(x,y,10,10);

}

public void azioneTimer(){x+=10;y+=10;repaint();if (y==200){timer.stop();}

}}

          

Page 60: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

60

ESERCITAZIONE 6 Provare l’applet AnimaPallina. Aggiungere un bottone “Stop” che interrompa il timer. Far muovere la pallina dentro un rettangolo, facendola

rimbalzare sui bordi Aggiungere due bottoni per aumentare e diminuire la velocità Realizzare con il timer un cronometro (pulsanti “Start” e “Stop”,

indicazione al decimo di secondo)

Page 61: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

61

I Thread

In Java è possibile la multiprogrammazione cioè è possibile far partire dei processi che girano in parallelo col processo che li ha fatti partire.Il tutto viene gestito attraverso l'oggetto Thread. Il processo da eseguire va indicato nel metodo run dello stesso oggetto, mentre i metodi start e stop possono essere usati per far partire/fermare il processo in parallelo. Di solito si evita di usare il metodo stop (il cui uso è deprecato) e si fa fermare il Thread usando una tecnica diversa. Per usare un Thread in un applet abbiamo bisogno di ridefinire un metodo di una classe diversa dalla classe madre: in questo caso il metodo run di Thread mentre la classe madre è Applet.

Page 62: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

62

I ThreadVediamo una possibile struttura di un Thread entro un applet:import java.applet.*;import java.awt.*;import java.awt.event.*;

public class nomeApplet extends Applet { mioThread t; public void init () { t = new mioThread(… parametri …);

new Thread(t).start();…

} public void paint (Graphics g) { t.disegna(g);

…}

Instanzio un oggetto

mioThread, passando eventuali parametri

Dà il via al Thread t

Richiama un metodo di mioThread

Page 63: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

63

Definizione di mioThread

I Thread

class mioThread implements Runnable {…

mioThread(… parametri …) {…

} public void run() {

…repaint();

} public void disegna(Graphics g) { … }

…}

}

obbligatorio

costruttore

Metodo run(): contiene quello che fa il Thread e, eventualmente, richiama

repaint()

Eventuali metodi di mioThread

I metodi start() e stop() esistono anche se non sono ridefiniti

Page 64: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

64

I ThreadUn esempio (la solita pallina):import java.applet.*;import java.awt.*;import java.awt.event.*;public class AnimaPallina extends Applet { Pallina p1; int lar, alt; public void init () { lar = this.getWidth(); alt = this.getHeight(); p1 = new Pallina(Color.RED, 50, 1); new Thread(p1).start(); } public void paint (Graphics g) { p1.disegna(g);

}class Pallina implements Runnable {

static final int RAGGIO=10; int x,y; int deltaX=10; int deltaY=10; Color colore; int ritardo, dir;

Page 65: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

65

I ThreadPallina(Color colore, int ritardo, int dir) {

this.colore=colore;this.ritardo=ritardo;this.dir = dir;

} public void run() { while (true) {

x += deltaX*dir; y += deltaY; if (x>=(lar-RAGGIO*2) || x<0) deltaX=-deltaX; if (y>=(alt-RAGGIO*2) || y<0) deltaY=-deltaY; try {Thread.sleep(ritardo);} catch (InterruptedException e)

{e.printStackTrace();} repaint(); } } public void disegna(Graphics g) { g.setColor(colore); g.fillOval(x, y, RAGGIO*2, RAGGIO*2); }

}}

Page 66: Applet Un applet o un’applet?. 2 Introduzione Gli applet sono una tipologia di programmi Java che, a differenza delle applicazioni Java, sono realizzati.

66

ESERCITAZIONE 6 Provare l’applet AnimaPallina con i Thread. Inserire un bottone Start (per far partire l’animazione) e un

bottone Stop (per fermarla) Aggiungere altre palline-Thread di vari colori e con varie direzioni Modificare la classe Pallina per passarle anche la posizione

iniziale (x, y) Animare con ritardi casuali le varie palline Realizzare una “corsa di palline”: movimento orizzontale, ritardi

casuali, individuare quale pallina arriva prima…