Applet Un applet o un’applet?.

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 Tutto su liceoclassicojesi.it 1° Incontro sulla gestione di liceoclassicojesi.it.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 51 Applet configurabili Grazie alla sezione parametri aggiuntivi del comando di HTML è possibile.
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Unit à E4 Applet. Obiettivi Saper progettare e realizzare Applet Java allinterno di pagine HTML Comprendere le interazioni tra il browser e lapplet Saper.
Applet Java.
Massa Laura Mela Enrica
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Java2 Esercitazioni del corso di Sistemi Informativi Marina Mongiello
Frontespizio Economia Monetaria Anno Accademico
S.I.S.S.I.S. Catania 2002/03 LE APPLET JAVA Prof. D. Cantone Amuso Raffaele.
Elementi di programmazione grafica
Elementi di programmazione grafica
Programmazione ad Eventi
1 HTML - I Frame Laboratorio di Applicazioni Informatiche II mod. A.
Applet Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Canale A. Prof.Ciapetti AA2003/04
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Eventi/2 Più movimento alle classi. 2 Eventi Java Modo per intercettare il verificarsi di certe condizioni / azioni e fare in modo che venga eseguito.
Esercizi di grafica ….
1 Grafica ed eventi/2 Più movimento alle classi. 2 Esercizio n.1 Realizzare una applicazione che permette il trascinamento di una ellissi allinterno di.
Più movimento alle classi
Gestione eventi esercitazione n aprile 2006.
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 81 Gestione dei colori La gestione dei colori in AWT consente di specificare un qualunque.
Gestione dei Progetti Software 2 (a.a. 204/05) - Lezione 4 1 Il package java.awt Gestione dellI/O orientato alla grafica: le finestre Sviluppo di interfacce.
Approfondimento delle classi
AA2003/04 © M.A. Alberti Programmazione Interfacce 1 Programmazione Corso di laurea in Informatica.
CAPITOLO 1 JAVA: UN TUFFO NEL LINGUAGGIO E NELL'AMBIENTE.
Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base.
Cos’è un problema?.
Capitolo 9 Interfacce e polimorfismo
Windows Sistema operativo con interfaccia grafica per PC IBM compatibili (varie versioni dal 95) La gestione dei file viene fatta secondo le modalità.
Introduzione alle basi di dati
JAVA E LA GRAFICA L’architettura Java è graphics-ready
APPLICAZIONI & APPLET Java è un ottimo linguaggio per costruire applicazioni anche non per Internet anche non grafiche ma si è diffuso storicamente, e.
Progettazione multimediale
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Esercitazioni di Meteorologia da satellite
QUIZ – PATENTE EUROPEA – ESAME WORD
HTML Lezione 8 I collegamenti ipertestuali (link).
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
1 Applet ed HTML Fondamenti di Informatica Corso D.
Modulo 6 Test di verifica
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
1. PRESENTAZIONE DEI PROGRAMMI UTILIZZATI Per registrare un video, editarlo o montare più video insieme si utilizza il programma AVS Video Editor. Il.
Aggiungiamo Elementi al Frame Per poter posizionare un elemento all'interno di un frame dobbiamo utilizzare il "layout manager". Ogni contenitore (Container)
Università degli Studi di Napoli Parthenope programmazione III.
Introduzione. Introduzione Un’applet Java: Una applet ("applicazioncina") è una applicazione non autonoma, ma pensata per far parte di una pagina Internet.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Java gestione eventi introduzione. La gestione degli eventi Ci sono 3 oggetti interessati alla g. d. e.: L’oggetto interessato (event source) ad esempio.
Breeze meeting Istruzioni per l’uso
Colori e Font in java.
Programmazione ad oggetti
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
Definizione di classi Capitolo 18 febbraio 2004 Definizione di classi.
Interfacce grafiche Capitolo 27 marzo 2004 Interfacce grafiche.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Timer Animazioni.
Capitolo 12 Thread Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Esercitazione  obiettivo: scrivere una applicazione per il gioco “Centra Bersaglio”  metodo individuazione e definizione delle classi necessarie.
Transcript della presentazione:

Applet Un applet o un’applet?

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

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

Un esempio 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); } 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

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

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

La classe Applet

La classe Applet

La classe Applet

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

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

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

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

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

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]) 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

Un esempio import 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); }

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 JApplet import 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

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)

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)

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(...)

Un esempio Questo è 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 disposizione setLayout(new BorderLayout()); setBackground(Color.white); //Campo di testo: valore da convertire t=new TextField("");

Un esempio //Bottone: richiede la conversione b=new Button("Converti"); //registrazione del bottone come “ascoltatore” b.addActionListener(this); //Costruzione del selettore di valuta //cbg serve a garantire la mutua esclusione CheckboxGroup cbg= new CheckboxGroup(); //due checkbox, appartenenti al gruppo cbg //la prima inizialmente selezionata lire= new Checkbox("£",true,cbg); //la seconda no euro= new Checkbox("Euro",false,cbg); //Raggruppa alcuni componenti Panel 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"); }

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 visualizza t.setText(NumberFormat.getInstance().format(d)); }

Un esempio In 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) {

Un esempio La pagina HTML che conterrà l’applet è la seguente: <body> <center> <h1>Conversione Lire/Euro</h1> <applet code="Convertitore" width="180" height="80"> </applet> </center> </body> </html>

JCreator e le applet nuovo es.: AppletScrittore es.: 4I1\applet Basic Java Applet

JCreator e le applet inserimento dell’Applet pagina HTML

JCreator e le applet applet creata automaticamente

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

JCreator e le applet 2° eseguire la pagina HTML

JCreator e le applet Viene 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!!!

JCreator e le applet Uso corretto di Jcreator (Workspace e Project) Configure – Options – Directories: nella Default Project Directory inserire la directory di lavoro della classe – Apply - OK New – Workspaces: scegliere Workspace name (es. Applet) – OK 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

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.

Un applet con parametri 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 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"> </BODY> </HTML>

Un applet con parametri 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); Acquisisce il valore del parametro “descrizione” Acquisiscono Width e Height dell’applet

Un applet con parametri Questo è il risultato:

Accesso al contesto 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)

Un esempio Un 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

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.

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.

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))

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);

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); }

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); }

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.)

Un esempio di repaint() Quest’applet modifica il colore di sfondo, oltre al contenuto e al colore di un TextField, facendo click su di un bottone: 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};

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]); repaint();

ESERCITAZIONE 4 Provare l’esempio di repaint() Ridisegna. Realizzare altri applet che usano repaint per: Modificare le dimensioni di un cerchio (con due bottoni “+” e “-” che ne aumentano e ne diminuiscono le dimensioni; 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).

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

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)

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 { … }

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

Un esempio Applet 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();

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

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();

Animazione Timer 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           

Un esempio import 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;

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();}           

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)

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.

I Thread Vediamo 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

I Thread class mioThread implements Runnable { … Definizione di mioThread 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

I Thread Un 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;

I Thread Pallina(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);

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…