S.I.S.S.I.S. Catania 2002/03 Amuso Raffaele LE APPLET JAVA Prof. D. Cantone Prerequisiti: Conoscenze di base del linguaggio Java; Conoscenze delle interfacce grafiche in Java; Generalità sulle immagini. Obiettivi: Cognitivi: - Conoscere gli elementi fondamentali di un’applicazione web oriented; - Conoscere le possibili interazioni dell’utente con un’applicazione web; Operativi: - Saper passare i parametri ad un applet; - Saper costruire un applet con elementi grafici ed interfacce utente. Metodologie: Lezione frontale; Esercitazioni pratiche; Piccoli progetti. Strumenti: Libro di testo; Appunti dell’insegnante; Calcolatore (JDK e IE). Verifica/Valutazione: Test V/F; Test pratico in laboratorio. Tempi: 3 settimane (totale 18 ore). Teoria 6 ore Laboratorio 6 ore Verifica 3 ore Approf./Recupero 3 ore Contenuti: Introduzione alle Applet; HTML e Applet; La classe Applet; L’appletwiever ed i browser. Contenuti: Le classi Canvas e Graphics; I metodi grafici; Le immagini e le Applet; L’awt e le Applet; I thread e le Applet; Le Midlet (cenni). Cosa sono le Applet: Le Applet sono applicativi web oriented scritti in linguaggio Java; Esse possono essere eseguite da un qualunque web browser compatibile con java; Vengono usate soprattutto per applicazioni grafiche e interattive. Perché le Applet: In origine le pagine web erano spoglie e povere di grafica; Non era possibile creare degli applicativi direttamente nelle pagine web; Tramite le Applet è stato possibile sia aumentare la qualità grafica del web che creare piccoli applicativi all’interno delle pagine. Come funzionano: javac Bytecode file.html Browser con Java W.M. file.java Sicurezza: Le Applet risultano sicure poiché, a differenza delle applicazioni, esse hanno alcune importanti restrizioni; Un applet non può compiere le seguenti operazioni: > Leggere e scrivere file locali; > Aprire una connessione con un server diverso da quello che la ospita; > Lanciare altre applicazioni sulla macchina locale; > Invocare il metodo System.exit(); > Accedere alle proprietà del sistema. HTML e Applet: In un file HTML è possibile richiamare un file in bytecode (.class) contenente un’ applet; Il TAG <APPLET> ci consente di inserire all’interno della nostra pagina HTML un’applet java. HTML e Applet: I parametri del TAG <APPLET> sono: CODE (nome del file .class) CODEBASE (path della directory di lavoro) HEIGHT e WIDTH (dimensioni dell’applet) All’interno del TAG <APPLET> è inoltre possibile passare i parametri relativi all’applet. HTML e Applet: ESEMPIO: <HTML> <BODY> <APPLET CODE=“file.class” CODEBASE=“.”> <PARAM name=p1 value=0> <PARAM name=p2 value=2> <PARAM name=p3 value=“pippo”> </APPLET> </BODY> </HTML> La classe Applet: Le applet vengono create estendendo la classe predefinita Applet; +--java.awt.Panel | +--java.applet.Applet Osservando la gerarchia delle classi si vede che la classe applet è una sottoclasse della classe Panel e ne eredita tutte le proprietà (componenti). La classe Applet: Diversamente dalle applicazioni java non occorre creare un frame, poiché esso è fornito direttamente dal browser che esegue l’applet; Per creare un’applet bisogna importare il package: “java.applet.*” esso infatti rende visibile la classe Applet all’interno del programma. La classe Applet: La struttura generale di un’applet è la seguente: import java.applet.*; public class <nome dell’applet> extends Applet { // attributi dell’applet // metodi dell’applet } I metodi delle Applet: I medoti introdotti dalla classe applet sono: Deve essere ridefinito se l’applet implementa l’interfaccia “runnable”. public void init(); public void start(); public void run(); public void stop(); public void destroy(); Essi sono richiamati dal browser o dall’appletviewer. I metodi delle Applet: Schema di funzionamento di un’applet: INIT START RUN STOP DESTROY I metodi delle Applet: La struttura di un applet java sarà quindi la seguente: import java.applet.*; public class <nome dell’applet> extends Applet { public void init() { // Inizializzazione } public void start() { // Parte l’applet } public void run() { // Corpo principale dell’applet } public void stop() { // L’applet si ferma } public void destroy() { // L’applet viene chiusa } } Canvas e Graphics: Il browser nel quale viene lanciata l’applet crea un frame in automatico. Ad un frame è possibile aggiungere pannelli e quindi componenti (bottoni, menù eccetera). Nel pannello dell’applet è inserito automaticamente un oggetto Canvas Un Canvas è una “tela” dove è possibile disegnare. Canvas e Graphics: Finestra dell’applet Canvas ( contiene il metodo paint ) Per disegnare nel canvas bisogna ridefinire il metodo paint. Dentro il metodo paint è possibile disegnare tramite i metodi della classe Graphics. Canvas e Graphics: (0,0) (w-1,h-1) Per ottenere le dimensioni del canvas (quindi dell’applet) basta richiamare il metodo getSize(). Tale metodo torna i seguenti interi: int w = getSize().width; (torna la larghezza) int h = getSize().height; (torna l’altezza) Il metodo paint: La finestra dell’applet fornita dal browser è una matrice di pixel wxh, dove andremo a scrivere tramite il metodo Paint. Tale metodo viene richiamato automaticamente. import java.applet.*; import java.awt.*; public class <nome della classe> extends Applet { … … public void paint(Graphics g) { // Ciò che verrà visualizzato nell’applet // Va inserito qui } } Il metodo paint: Vi sono numerosi metodi per scrivere in tale matrice. Uno dei primi metodi che si usa è drawString: Graphics.drawString(String s,int x,int y); drawString è usato per scrivere del testo nello schermo dell’applet alle coordinate (in pixel) specificate. La prima Applet: Applet che stampa una stringa a video: import java.applet.*; import java.awt.*; public class Hello extends Applet { int X,Y; String S; public void init() { S = new String("Ciao a tutti!"); X=20; Y=20; } public void paint(Graphics g) { g.drawString(S,X,Y); } } La prima Applet: File HTML che richiama l’applet: <html> <applet code="Hello.class" width=320 height=200> </applet> </html> Basta richiamare il file tramite un browser o con l’appletviewer. C:>appletviewer Hello.html La classe Graphics: I metodi della classe Graphics (da richiamare dentro paint(): Graphics.setColor(Color c); Graphics.drawString(String s,int x,int y); Graphics.fillRect(int x1, int y1, int x2, int y2); Graphics.fillOval(int cx, int cy, int dx, int dy); Graphics.drawRect(int x1, int y1, int x2, int y2); Graphics.drawOval(int cx, int cy, int dx, int dy); Graphics.drawLine(int x1, int y1, int x2, int y2); Graphics.drawImage(Image i, int x,int y, null); Graphics.fillArc(int x, int y, int dx, int dy, int startG, int arcG); I colori: La gestione dei colori in java è affidata alla classe Color. Esiste una lista di colori predefiniti: Color.black; Color.white; Color.red; Color.green; … Oppure si può istanziare un colore tramite le sue componenti RGB in questo modo: Color rosso = new Color(255,0,0); Passaggio di parametri: E’ possibile passare dei parametri all’applet dal file HTML (tag PARAM) Ogni parametro ha un nome ed un valore; L’applet legge i parametri tramite il metodo getParameter(). Passaggio di parametri: Applet che stampa una stringa passata come paramero: import java.applet.*; import java.awt.*; public class Hello extends Applet { int X,Y; String S; public void init() { S =getParameter("text"); X=20; Y=20; } public void paint(Graphics g) { g.drawString(S,X,Y); } } Passaggio di parametri: File HTML che richiama l’applet (con parametri): <html> <applet code="Hello.class" width=320 height=200> <PARAM name=“text” value=“Ciao a tutti!”> </applet> </html> I parametri vengono letti tutti come stringhe, bisogna quindi operare le opportune conversioni nel leggere parametri numerici. I thread: I thread ci consentono di sfruttare le potenzialità multitasking del S.O.; Ha senso usare i metodi star(), run() e stop() solo quando un applet e implementata come Runnable; In questo caso l’applet viene vista come un processo del S.O. che può avere una priorità, essere fermato, fatto ripartire o trovarsi nello stato di run. I thread: Per associare una applet ad un thread dobbiamo istanziare la classe Thread. I metodi della classe Thread sono: setPriority(P); start(); stop(); sleep(M); (P può essere: MAX_ PRIORITY, MIN_ PRIORITY, NORM_ PRIORITY) (M rappresenta i Millisecondi di sleep) Semplice scrolling: Esempio dell’uso dei thread. import java.applet.*; import java.awt.*; public class Hello extends Applet implements Runnable { int X,Y; String S; Thread RUN; public void init() { public void paint(Graphics g) { S = new String("Ciao a tutti!"); g.setColor(Color.white); X=20; Y=20; } g.fillRect(0,0,320,200); public void start() { g.setColor(Color.black); RUN=new Thread(this); g.drawString(S,X,Y); } RUN.setPriority(RUN.MIN_PRIORITY); } RUN.start(); } public void run() { while(true) { X++; if(X>320) X=-20; paint(getGraphics()); // Manda a video try{ RUN.sleep(10); } catch(Exception e) {} } } public void stop() { RUN.stop(); } Le immagini: La gestione delle immagini è compito della classe Image. Un’immagine dovrà essere contenuta in una variabile di tipo Image. Caricamento di un immagine da un file: Image SFONDO; … SFONDO=getImage(getDocumentBase(),getParameter("img")); … Carica l’immagine Directory di lavoro dell’applet Prende il valore del parametro Le immagini: Il file HTML si presenta cosi: <html> <applet codebase=“.” code="Hello.class“ width=320 height=200> <PARAM name=“img” value=“papero.gif”> </applet> </html> Nome del parametro Valore (nome del file) Sarà possibile stampare l’immagine a video tramite il metodo drawImage(). Esempi finali: Scroll di testo con sfondo; Esempio di A.W.T.; Effetto grafico natalizio. Le midlet (cenni): javac file.java Bytecode Cellulare con Java W.M. Si usa Java Micro Edition e il wireless toolkit. java.sun.com Le midlet (cenni): La “filosofia” delle midlet è simile a quella delle applet. Una midlet è costruita come estensione della classe MIDlet: import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class <nome midlet> extends MIDlet { // attributi della midlet Metodi per il // metodi della midlet display LCD } Fine!