Applet Applet: il termine identifica piccole applicazioni da eseguirsi all’interno di un browser. Una pagina web può contenere un riferimento al codice di un applet che verrà scaricato insieme alla pagina web. La pagina web ha riservato uno spazio, un riquadro, all’interno del quale sarà visualizzato il risultato dell’esecuzione dell’applicazione. Applet – IngSW0304 – p.1 Applet Il browser si prenderà carico di lanciare l’esecuzione dell’applet, dopo avere scaricato la pagina web e il codice dell’applet. Il browser deve essere provvisto di un Java Runtime Environment (e quindi di una JVM) che abilita il browser ad eseguire applicazioni web. Applet – IngSW0304 – p.2 Applet e pannelli Un applet è a tutti gli effetti un pannello. Per costruire un applet è necessario definire una classe che estenda per ereditarietà la classe JApplet del package Swing (oppure, la classe Applet del package awt). La classe JApplet deriva direttamente dalla classe JPanel e quindi non è altro che un pannello specializzato. Quindi: gli applet non sono applicazioni autonome, ma sono dei pannelli che devono essere inseriti nella finestra del browser che agisce come contenitore. Applet – IngSW0304 – p.3 Metodi degli applet Gli applet hanno metodi con nomi predefiniti che ne contengono il codice d’esecuzione. L’esecuzione di tale codice viene automaticamente gestita dal browser, che provvede a comandare l’esecuzione dell’applet tramite opportune invocazioni dei metodi. init(): gioca il ruolo di costruttore e serve per inizializzare l’applet. Una volta scaricato l’applet, viene direttamente invocato dal browser. paint(): analogo al metodo paintComponent() per i componenti JPanel. Serve per disegnare sul pannello e accetta come parametro un oggetto della classe Graphics. Anche questo metodo viene invocato automaticamente dal browser. Applet – IngSW0304 – p.4 Metodi degli applet start(): invocato automaticamente dopo la creazione dell’applet. Usato per animazioni o per lanciare thread (unità in esecuzione simili ai processi). stop(): invocato automaticamente tutte le volte in cui è necessario fermare l’esecuzione; per esempio, quando la finestra viene ridotta a icona. Serve per specificare le azioni da compiere quando l’applicazione viene temporaneamente interrotta. destroy(): viene automaticamente invocato alla terminazione dell’applet. Applet – IngSW0304 – p.5 Il codice HTML Una volta compilato il file di un applet, per esempio App1.java, otteniamo il file App1.class che sarà inserito nel codice HTML mediante il tag APPLET: Il file App1.class deve essere inserito in un codice HTML in modo che il browser, caricata la pagina, carichi anche l’applet. Questo è ottenuto mediante il tag APPLET: <applet code="App1.class" width=200 height=220> </applet> nel quale inseriamo il nome del file (.class) e le dimensioni del frame che ospita il pannello. Applet – IngSW0304 – p.6 Un esempio Riprendiamo il codice dell’esempio dell’uso del componente CheckBox (scelta delle band) e modifichiamo il codice in modo da renderlo un applet. Osservazioni: Il ruolo di costruttore dell’applet è svolto da init(). I componenti devono essere aggiunti al Container e NON all’applet. Dobbiamo specificare esplicitamente il layout. L’applet può essere impostato come ascoltatore degli eventi (quindi apportiamo solo piccole modifiche al codice). E’ comunque possibile avere un ascoltatore degli eventi separato. Applet – IngSW0304 – p.7 Il codice dell’applet import import import import java.awt.*; java.awt.event.*; javax.swing.*; java.applet.*; public class AppletMolteCaselle extends JApplet implements ItemListener{ public void init(){ txt = new JTextField("Seleziona",15); txa = new JTextField(25); txt.setEditable(false); txa.setEditable(false); ck = new JCheckBox[5]; //... Applet – IngSW0304 – p.8 Il codice dell’applet //... ck[0]=new ck[1]=new ck[2]=new ck[3]=new ck[4]=new //... JCheckBox("Eric Clapton"); JCheckBox("Dire Straits"); JCheckBox("Aerosmith"); JCheckBox("Boston"); JCheckBox("Dave Matthews"); Applet – IngSW0304 – p.9 Il codice dell’applet //... for (int i=0; i<5; i++) ck[i].addItemListener(this); Container c = getContentPane(); c.setLayout(new GridLayout(7,1)); c.add(txt); for (int i=0; i<5; i++) c.add(ck[i]); c.add(txa); } //... Applet – IngSW0304 – p.10 Il codice dell’applet //... public void itemStateChanged(ItemEvent e){ int cont = 0; for (int i=0; i<5; i++) if (ck[i].isSelected()) cont++; txa.setText(cont + " elementi selezionati");} JTextField txt,txa; JCheckBox ck[]; } Applet – IngSW0304 – p.11 Il codice HTML <html> <head> <title>Un po’ di musica</title> </head> <body> <h1>Scegli le band</h1> <applet code="AppletMolteCaselle.class" width=200 height=220> </applet> </body> </html> Applet – IngSW0304 – p.12 Attributi del tag APPLET Il tag APPLET dell’HTML permette di specificare diversi attributi. In particolare, è possibile specificare una directory diversa da quella contenente il file HTML per andare a recuperare il codice dell’applet (e delle classi utilizzate da essa). Si tratta dell’attributo codebase. <applet code="AppletMolteCaselle.class" codebase="MieApplet" width=200 height=220> </applet> Applet – IngSW0304 – p.13 Eseguire un applet Un applet non è eseguibile come applicazione a sé stante, infatti non ha un main e un frame che lo contenga. Eclipse ci permette di eseguire un applet! Applet – IngSW0304 – p.14