java con netbeans - digidownload.libero.itdigidownload.libero.it/giotorrero/informatica/java.pdf ·...

57
JAVA con NetBeans

Upload: dolien

Post on 21-Feb-2019

214 views

Category:

Documents


1 download

TRANSCRIPT

JAVA con NetBeans

Giovanni Torrero

E-mail =⇒ [email protected]

Indice

Capitolo 1. Il primo programma 51.1. L’ambiente operativo 51.2. La calcolatrice 161.3. Gli oggetti 21

Capitolo 2. Applet 332.1. Introduzione agli applet 33

Indice analitico 55

Bibliografia 57

3

CAPITOLO 1

Il primo programma

1.1. L’ambiente operativo

NetBeans è un I.D.E. particolarmente adatto per scrivere programmi usan-do il linguaggio Java. Per procurarsi questo programma bisogna collegarsicon:

http://www.netbeans.org/downloads/

dopo aver installato il programma possiamo iniziare con il nostro primoprogetto. Per fare questo seguiamo i passi indicati nella figura 1.1.1

Figura 1.1.1. Iniziare il primo progetto

Successivamente appare sullo schermo la finestra riportata nella figura 1.1.2nella pagina successiva.

5

6 1. IL PRIMO PROGRAMMA

Figura 1.1.2. Iniziare il primo progetto, passo 2

Dopo aver scelto Next la finestra di dialogo si modifica come indicato infigura 1.1.3 a fronte

Scegliendo il pulsante Finish il progetto viene completato, si tratta solo del-lo scheletro di una applicazione priva di funzionalità, comunque possiamocompilarla come è indicato nella figura 1.1.4 nella pagina 8

Dopo aver compilato il progetto possiamo lanciare il programma appenacostruito seguendo la procedura indicata nella figura 1.1.5 nella pagina 9

Altri modi per ottenere lo stesso risultato è quello di usare il tasto F6 oppureusare l’icona nella barra delle icone. Quanto detto ci permette di lan-ciare il programma avendo però in funzione NetBeans, ma se noi vogliamodistribuire la nostra applicazione ad altri utenti che non possiedono Net-Beans come possiamo fare? Andiamo nella cartella nella quale è memo-rizzata l’applicazione, scegliamo la cartella che contiene il nostro progetto

aprendola troveremo la cartella , dentro questa cartella vi è tut-to quello che serve per distribuire la nostra applicazione, comprimiamolacon WinZip e distribuiamo il file ottenuto. In particolare in quella cartellavi è il file Frasi.jar che è eseguibile, se sul nostro computer abbiamo la

1.1. L’AMBIENTE OPERATIVO 7

Figura 1.1.3. Iniziare il primo progetto, passo 3

Java Virtual Machine, facendo doppio click su Frasi.jar possiamo lanciarel’applicazione.

Diamo una qualche funzionalità all’applicazione, aggiungiamo alla finestradell’applicazione tre caselle di testo e un pulsante. Nelle prime due casellescriveremo due frasi, premendo il pulsante nella terza casella dovrà apparirel’unione delle due frasi scritte nelle altre due caselle.

In NetBeans nella finestra Palette , che contiene vari strumenti da utiliz-zare, scegliamo Text Field , come indicato in figura 1.1.6 nella pagina 10

Spostiamoci nella applicazione e aggiungiamo i tre campi di testo e ilbottone, vedi figura 1.1.7 nella pagina 11

Se ci spostiamo su uno degli elementi appena inseriti e facciamo click conil tasto destro del mouse appare un menù a discesa nel quale scegliamo lavoce Properties , vedi figura 1.1.8 nella pagina 12 , facendo click sullavoce scelta apparirà la seguente casella di dialogo (vedi figura 1.1.9 nellapagina 13)

8 1. IL PRIMO PROGRAMMA

Figura 1.1.4. Compilate il vostro primo progetto

In questa finestra possiamo ad esempio cambiare il testo che appare sul-l’icona del bottone. Nella parte alta della finestra di dialogo scegliamoEvents vedi figura 1.1.10 nella pagina 14.

Ci verrà proposta una lista degli eventi che si possono gestire, facciamoclick su actionPerformed automaticamente, a fianco, vi viene proposto ilnome del metodo che gestirà l’evento e nella finestra del codice vi verràproposto lo scheletro del metodo, vedi figura 1.1.11 nella pagina 14

Aggiungiamo al metodo appena costruito le cinque righe di codice riportatein figura 1.1.12 nella pagina 15, compiliamo e eseguiamo e la nostra primaapplicazione entrerà in funzione.

1.1. L’AMBIENTE OPERATIVO 9

Figura 1.1.5. Lanciare l’applicazione mediante NetBeans

10 1. IL PRIMO PROGRAMMA

Figura 1.1.6. Gli strumenti di NetBeans

1.1. L’AMBIENTE OPERATIVO 11

Figura 1.1.7. I tre campi di testo e il bottone

12 1. IL PRIMO PROGRAMMA

Figura 1.1.8. Modifica delle proprietà di un controllo

1.1. L’AMBIENTE OPERATIVO 13

Figura 1.1.9. Finestra delle proprietà del bottone

14 1. IL PRIMO PROGRAMMA

Figura 1.1.10. Gestione dell’evento pressione del bottone Unisci

Figura 1.1.11. Codice automaticamente aggiunto da NetBeans

1.1. L’AMBIENTE OPERATIVO 15

Figura 1.1.12. Codice che dà funzionalità al bottone Unisci

16 1. IL PRIMO PROGRAMMA

1.2. La calcolatrice

Il nostro primo vero programma sarà la solita calcolatrice, potremo cosìdare un’occhiata ai tipi di dati, alle classi e agli oggetti. Cominceremo conuna calcolatrice molto elementare che fa solo le quattro operazioni.

Costruiamo un nuovo progetto, che chiameremo ProgettoCalcolatrice, u-sando la stessa procedura indicata nelle figure 1.1.1 nella pagina 5, 1.1.2nella pagina 6, 1.1.3 nella pagina 7.

Figura 1.2.1. Il form della calcolatrice

Popoliamo il form ottenuto come indicato nella figura 1.2.1, tenendo pre-sente, anche se nella form non si vede, che bisogna inserire un ButtonGroup e collegare ad esso, tramite la finestra Properties, i due Radio But-ton 1. Il Form rappresenta l’interfaccia utente e il suo compito è soloquello di raccogliere i dati e visualizzare i risultati, l’elaborazione dei datisarà affidata ad una apposita classe che chiameremo CalCal, quindi leuniche funzionalità che devono risiedere all’interno del form sono quelledei Button che rappresentano i numeri e i tasti di cancellazione, mentre i

1Settare opportunamente la proprietà button Group

1.2. LA CALCOLATRICE 17

tasti delle operazioni richiameranno degli opportuni metodi di CalCal i cuirisultati verrano visualizzati nella label risultato.

Per dare funzionalità ai tasti numerici scegliamo uno di essi, ad esempio iltasto 0 , andiamo nella finestra Properties e scegliamo Event , succes-sivamente facciamo click su ActionPerformed nella casella vicina appariràil nome del relativo metodo, facendo doppio click si ActioinPerformed pas-siamo al relativo codice, costruito automaticamente, che è quello riportatonella figura 1.2.2

Figura 1.2.2. struttura iniziale di jButton10ActionPerformed

Successivamente modifichiamo il codice come indicato qui sotto:

private void jButton10ActionPerformed(java.awt.event.ActionEvent evt){ // TODO add your handling code here:if (jRadioButton1.isSelected() ) jRadioButton1.setText(jRadioButton1.getText()+"0");if (jRadioButton2.isSelected() ) jRadioButton2.setText(jRadioButton2.getText()+"0");}

Ripetiamo questa operazione per ciascuna dei 10 tasti numerici.

Ripetiamo la stessa operazione per il tasto , usando il codice sotto ripor-tato:

private void jButton11ActionPerformed(java.awt.event.ActionEvent evt){ // TODO add your handling code here:if (jRadioButton1.isSelected() ) jRadioButton1.setText(jRadioButton1.getText()+".");if (jRadioButton2.isSelected() ) jRadioButton2.setText(jRadioButton2.getText()+".");}

Il Button CLS serve per resettare la calcolatrice, quindi tutte le label de-vono essere riportate allo stato iniziale, procediamo nel solito modo emodifichiamo il metodo ActionPerformed come indicato sotto:

private void jButton17ActionPerformed(java.awt.event.ActionEvent evt){ // TODO add your handling code here:

jRadioButton1.setText(""); jRadioButton2.setText("");jLabel1.setText("operazione");jLabel3.setText("risultato");

}

Più complessa è l’azione del tasto C , esso deve cancellare solo l’ultimacifra relativa al Radio Button selezionato. Per realizzare questa funzionalitàbisogna imparare a manipolare le stringhe. Il primo metodo utile per ilnostro scopo è il metodo lenght() della classe string, qui di seguito è

18 1. IL PRIMO PROGRAMMA

riportato quanto scritto nella documentazione di Java a proposito di questometodolengthpublic int length()Returns the length of this string. The length is equal to the number of Unicodecode units in the string.Specified by: length in interface CharSequenceReturns: the length of the sequence of characters represented by this object.

Il secondo metodo della classe String che useremo sarà substring() , nel-la casella seguente è riportato quanto viene detto a proposito di questometodo nella documentazione di Java.substringpublic String substring(int beginIndex, int endIndex)Returns a new string that is a substring of this string. The substring beginsat the specified beginIndex and extends to the character at index endIndex - 1.Thus the length of the substring is endIndex-beginIndex.Examples:"hamburger".substring(4, 8) returns "urge""smiles".substring(1, 5) returns "mile"Parameters: beginIndex - the beginning index, inclusive. endIndex - the endingindex, exclusive. Returns: the specified substring.Throws: IndexOutOfBoundsException - if the beginIndex is negative, or endIn-dex is larger than the length of this String object, or beginIndex is larger thanendIndex.

Infine, dopo aver proceduto con il tasto C nello stesso modo seguito per glialtri tasti, bisogna completare il codice prodotto automaticamente comeindicato sotto:

private void jButton12ActionPerformed(java.awt.event.ActionEvent evt){ // TODO add your handling code here:String radio1 = jRadioButton1.getText();String radio2 = jRadioButton2.getText();if ((jRadioButton1.isSelected()) & (radio1.length()>0))

jRadioButton1.setText(radio1.substring(0, radio1.length()-1));if ((jRadioButton2.isSelected()) & (radio2.length()>0))

jRadioButton2.setText(radio2.substring(0, radio2.length()-1));}

1.2. LA CALCOLATRICE 19

Per dare funzionalità agli altri tasti è necessario introdurre la classe CalCal,per introdurre una classe in un progetto si seguono le istruzioni contenutenelle figure 1.2.3 , 1.2.4 , 1.2.5 nella pagina successiva.

Figura 1.2.3. Inserire una nuova classe (1)

Figura 1.2.4. Inserire una nuova classe (2)

Dopo aver compiuto tutti questi passi otteniamo lo scheletro della nuovaclasse che dobbiamo riempire, per fare questo dobbiamo prima fare unariflessione sulla programmazione ad oggetti.

20 1. IL PRIMO PROGRAMMA

Figura 1.2.5. Inserire una nuova classe (3)

1.3. GLI OGGETTI 21

1.3. Gli oggetti

La programmazione ad oggetti (vedi[1] ) si basa sulla simulazione, per viainformatica, degli oggetti che il programma deve manipolare. Il concettodi oggetto va inteso in modo ampio, un oggetto può essere una figura, una persona, un concetto astratto come il contenuto di un insieme difrasi. Dato un oggetto ne esistono molti altri dello stesso tipo, ad esempiola parola automobile richiama alla mente una classe di oggetti alla qualeappartengono la mia automobile, l’automobile del mio amico Carlo, l’au-tomobile che ha vinto il Gran Premio di Imola, ....etc. Quindi ogni oggettoappartiene ad una classe di oggetti, il concetto di classe, nella program-mazione ad oggetti, deriva appunto dalla classe che accomuna più oggettidello stesso tipo. Quindi il concetto di classe è simile al concetto di tipo,la classe è il tipo di oggetto che stiamo considerando. Definita una classenon si è definito un particolare oggetto, ma solo il suo tipo. Per definire unsingolo oggetto di quel tipo bisogna ricorrere all’istanziazione che si ottienela parola chiave new, ad esempio la linea di codice :

CalcCalc calcoli = new CalcCalc();

abbiamo effettivamente costruito un oggetto di tipo CalcCalc il cui nome ècalcoli , fino a quando non si usa la parola chiave new non viene costruitoun oggetto, new alloca la memoria per l’oggetto e ritorna un puntatore allamemoria allocata.

All’interno di una classe possiamo inserire due tipi di costrutti: le proprietàe i metodi . Cominciamo ad occuparci delle proprietà.

Innanzitutto richiamiamo il file CalcCalc.java nell’IDE di NetBeans, perfare questo nel riquadro Projects scegliamo ProgettoCalcolatrtice apri-amo Source Package e poi progettocalcolatrice , infine selezioniamo CalcCalc.java ,come indicato nella figura 1.3.1 nella pagina seguente, verrà quindi apertala finestra relativa a questo file.

Con CalcCalc,java selezionato, nel menù scegliamo Source + Insert Code(vedi figura 1.3.2 nella pagina successiva) , aprendo così il pop-up riportatonella figura 1.3.3 nella pagina 23.

Nel pop-up scegliamo AddProperty e si aprirà la scheda riportata nellafigura 1.3.4 nella pagina 24.

Questa scheda va completata come indicato nella figura ed infine scegliamoil tasto OK, nel file CalcCalc.java verrà automaticamente inserito il codicerelativo alla proprietà. Allo stesso modo inseriamo una seconda proprietàe una terza proprietà: operando2 e risultato . Inseriamo poi i metodi,questi vanno inseriti manualmente.

22 1. IL PRIMO PROGRAMMA

Figura 1.3.1. CalcCalc.java

Figura 1.3.2. Inserimento automatico del codice

Ecco come il file CalcCalc.java dovrebbe apparire dopo aver seguito leistruzioni sopra riportate.

1.3. GLI OGGETTI 23

Figura 1.3.3. Aggiungi una proprietà

24 1. IL PRIMO PROGRAMMA

Figura 1.3.4. Operando 1

1.3. GLI OGGETTI 25

Note 1.1. Listato della classe CalcCalc: prima parte

1 /∗2 ∗ To change t h i s template , choose Too l s | Templates3 ∗ and open the t emp la t e i n the e d i t o r .4 ∗/56 package p r o g e t t o c a l c o l a t r i c e ;78 /∗∗9 ∗

10 ∗ @author G iovann i To r r e ro11 ∗/1213 pub l i c c l a s s Ca l cCa l c {14 pr ivate Double operando1 ;15 /∗∗16 ∗ Get the v a l u e o f operando117 ∗ ∗ @re tu rn the v a l u e o f operando118 ∗/19 pub l i c Double getOperando1 ( ) {20 return operando1 ;21 }2223 /∗∗24 ∗ Set the v a l u e o f operando125 ∗26 ∗ @param operando1 new va l u e o f operando127 ∗/28 pub l i c void setOperando1 ( Double operando1 ) {29 t h i s . operando1 = operando1 ;30 }3132 pr ivate Double operando2 ;

26 1. IL PRIMO PROGRAMMA

Note 1.2. Listato della classe CalcCalc: seconda parte

12 /∗∗3 ∗ Get the v a l u e o f operando24 ∗5 ∗ @re tu rn the v a l u e o f operando26 ∗/7 pub l i c Double getOperando2 ( ) {8 return operando2 ; }9

10 /∗∗11 ∗ Set the v a l u e o f operando212 ∗13 ∗ @param operando2 new va l u e o f operando214 ∗/15 pub l i c void setOperando2 ( Double operando2 ) {16 t h i s . operando2 = operando2 ;17 }1819 pr ivate Double r i s u l t a t o ;202122 /∗∗23 ∗ Get the v a l u e o f r i s u l t a t o24 ∗ ∗ @re tu rn the v a l u e o f r i s u l t a t o25 ∗/26 pub l i c Double g e t R i s u l t a t o ( ) {27 return r i s u l t a t o ;28 }2930 /∗∗31 ∗ Set the v a l u e o f r i s u l t a t o32 ∗33 ∗ @param r i s u l t a t o new va l u e o f r i s u l t a t o34 ∗/35 pub l i c void s e t R i s u l t a t o ( Double r i s u l t a t o ) {36 t h i s . r i s u l t a t o = r i s u l t a t o ;37 }

1.3. GLI OGGETTI 27

Note 1.3. Listato della classe CalcCalc: terza parte

1 ∗ Add i z i one d e i due ope r and i2 ∗ @param op1 S t r i n g a che c o n t i e n e i l pr imo operando3 ∗ @param op2 S t r i n g a che c o n t i e n e i l secondo operando4 ∗ @re tu rn Os s e r v a r e come i due pa r ame t r i s i a n o d e l l e

s t r i n g h e5 ∗ vengono t r a s f o rm a t i i n Double ed i l

r i s u l t a t o6 ∗ v i e n e r i t r a s f o rm a t o i n una s t r i n g a7 ∗/8 pub l i c S t r i n g a d d i z i o n e ( S t r i n g op1 , S t r i n g op2 ) {9 setOperando1 (new Double ( op1 ) ) ;

10 setOperando2 (new Double ( op2 ) ) ;11 s e t R i s u l t a t o ( getOperando1 ( )+getOperando2 ( ) ) ;12 return g e t R i s u l t a t o ( ) . t o S t r i n g ( ) ;13 }1415 /∗∗16 ∗ So t t r a z i o n e d e i due ope r and i17 ∗ @param op118 ∗ @param op219 ∗ @re tu rn20 ∗/21 pub l i c S t r i n g s o t t r a z i o n e ( S t r i n g op1 , S t r i n g op2 ) {22 operando1 = new Double ( op1 ) ;23 operando2 = new Double ( op2 ) ;24 r i s u l t a t o = operando1 − operando2 ;25 return r i s u l t a t o . t o S t r i n g ( ) ;26 }

28 1. IL PRIMO PROGRAMMA

Note 1.4. Listato della classe CalcCalc: quarta parte

12 /∗∗3 ∗ M o l t i p l i c a z i o n e d e i due ope r and i4 ∗ @param op15 ∗ @param op26 ∗ @re tu rn7 ∗/8 pub l i c S t r i n g m o l t i p l i c a z i o n e ( S t r i n g op1 , S t r i n g op2 ) {9 operando1 = new Double ( op1 ) ;

10 operando2 = new Double ( op2 ) ;11 r i s u l t a t o = operando1 ∗ operando2 ;12 return r i s u l t a t o . t o S t r i n g ( ) ;13 }1415 /∗∗16 ∗ D i v i s i o n e d e i due ope r and i17 ∗ @param op118 ∗ @param op219 ∗ @re tu rn20 ∗/21 pub l i c S t r i n g d i v i s i o n e ( S t r i n g op1 , S t r i n g op2 ) {22 operando1 = new Double ( op1 ) ;23 operando2 = new Double ( op2 ) ;24 r i s u l t a t o = operando1 / operando2 ;25 return r i s u l t a t o . t o S t r i n g ( ) ;26 }27 }

1.3. GLI OGGETTI 29

Una classe contiene sostanzialmente due cose: le proprietà (o attribu-ti) e i metodi. Le proprietà vanno dichiarati private , questo significache possono essere utilizzate soltanto all’interno della classe in cui sonostate dichiarate (hanno la visibilità ridotta alla classe nella quale sono statedichiarate), per permettere di leggere o modificare le proprietà, NetBeans,costruisce automaticamente, per ogni proprietà dichiarata private, il meto-do set.... e il metodo get.... , il primo serve per aggiornare la proprietà,il secondo per estrarre il contenuto. Questo modo di procedere sembra uninutile artificio, ma questi due metodi costituiscono una comoda interfac-cia tra gli oggetti di quella classe e l’esterno e consentono di modificare ilcodice all’interno della classe senza dover modificare le istruzioni, scrittenei file esterni alla classe 2.

Mentre le proprietà vengono gestite automaticamente da NetBeans per imetodi questo è impossibile e vanno scritti manualmente. La dichiarazionedi un metodo è costituita da una intestazione e dal corpo del metodocompreso tra parentesi graffe, vedi la figura 1.3.5

Figura 1.3.5. Struttura di un metodo

Ricordiamo che una classe non è un oggetto, ma un tipo di oggetto. Percreare un oggetto, come già detto, dobbiamo usare il comando new. Adesempio nel codice della classe ProgettoCalcolatriceView contenuta nelfile ProgettoCalcolatriceView.java vi è l’istruzione

2Questo modo di procedere viene chiamato incapsulamento

30 1. IL PRIMO PROGRAMMA

CalcCalc calcoli = new CalcCalc();

con questa istruzione viene creato l’oggetto calcoli appartenente alla classeCalcCalc, per richiamare i metodi di quella classe, ad esempio il metodoaddizione si usa una istruzione come quella riportata alla riga 2 del lista-to 1.5 nella pagina successiva dove è riportato il codice da utilizzare perdare funzionalità ai quattro tasti delle operazioni.

Spendiamo due parole sui modificatori di accesso, questi aggettivi riguardanosia i metodi che le proprietà, ma le proprietà abbiamo visto che è sem-pre meglio dichiararle private e poi usare i relativi metodi per accedere aesse, quindi sulle proprietà non diciamo più nulla. I metodi possono esseredichiarati:

pubblic: in questo caso sono accessibile dappertutto nel progetto,anche fuori dalla classe nella quale sono definiti;

protected: sono accessibile solo nella classe in cui è definito e nelleclassi che ereditano3 la classe in cui e definito

default: se omettiamo il modificatore di accesso abbiamo usatoquesto tipo di modificatore, l’accessibilità al metodo è possibilesolo dalle classi che appartengono allo stesso package 4 al qualeappartiene la classe nella quale il metodo è definito.

private: il metodo è accessibile solo dalla classe nella quale è defini-to.

3L’eredità tra classi sarà vista in seguito4Un package è una directory nella quale NetBeans mette le classi, ne può creare

diverse e servono per mettere ordine quando il numero di classi diventa grande. Lagestione dei package è molto favorita da NetBeans, i nostri interventi sono minimi,questa questione sarà vista più tardi.

1.3. GLI OGGETTI 31

12 Ca l cCa l c c a l c o l i = new Ca l cCa l c ( ) ;34 pr ivate void jBu t ton13Act i onPe r fo rmed ( j a v a . awt . even t .

Act i onEvent ev t ) {//GEN−FIRST :event_jBut ton13Act ionPer fo rmed

5 // TODO add your h and l i n g code he r e :6 S t r i n g ra , op1 , op2 ;7 op1 = jRad ioBut ton1 . getText ( ) ;8 op2 = jRad ioBut ton2 . getText ( ) ;9 ra = c a l c o l i . a d d i z i o n e ( op1 , op2 ) ;

10 j L a b e l 1 . s e tTex t ( "+" ) ;11 j L a b e l 3 . s e tTex t ( ra ) ;1213 }//GEN−LAST : event_jBut ton13Act ionPer fo rmed1415 pr ivate void jBu t ton14Act i onPe r fo rmed ( j a v a . awt . even t .

Act i onEvent ev t ) {//GEN−FIRST :event_jBut ton14Act ionPer fo rmed

16 // TODO add your h and l i n g code he r e :17 S t r i n g ra , op1 , op2 ;18 op1 = jRad ioBut ton1 . getText ( ) ;19 op2 = jRad ioBut ton2 . getText ( ) ;20 ra = c a l c o l i . s o t t r a z i o n e ( op1 , op2 ) ;21 j L a b e l 1 . s e tTex t ( "−" ) ;22 j L a b e l 3 . s e tTex t ( ra ) ;23 }//GEN−LAST : event_jBut ton14Act ionPer fo rmed2425 pr ivate void jBu t ton15Act i onPe r fo rmed ( j a v a . awt . even t .

Act i onEvent ev t ) {//GEN−FIRST :event_jBut ton15Act ionPer fo rmed

26 // TODO add your h and l i n g code he r e :27 S t r i n g ra , op1 , op2 ;28 op1 = jRad ioBut ton1 . getText ( ) ;29 op2 = jRad ioBut ton2 . getText ( ) ;30 ra = c a l c o l i . m o l t i p l i c a z i o n e ( op1 , op2 ) ;31 j L a b e l 1 . s e tTex t ( "∗" ) ;32 j L a b e l 3 . s e tTex t ( ra ) ;33 }//GEN−LAST : event_jBut ton15Act ionPer fo rmed

Listato 1.5. Classe ProgettoCalcolatriceView.java

CAPITOLO 2

Applet

2.1. Introduzione agli applet

Usando Babylon 1 la parola applet viene tradotta nel seguente modo:

Un programma scritto in linguaggio Java per l’esecuzione in un brow-ser Web compatibile con Java, quali HotJava(TM) o Netscape Naviga-tor(TM), ecc. Breve codice che può essere trasferito in Internet ed eseguitonei computer client. Questo termine viene utilizzato spesso per fare rife-rimento a programmi incorporati in una riga come oggetti nei documentiHTML per Internet.Con NetBeans è possibile produrre applet di vario tipo, innanzitutto scegliamoNew Project dal menù File oppure dalla toolbar e procediamo comeindicato nella figura 2.1.1

Figura 2.1.1. Creare un applet, passo 1

1Per informazioni su Babylon http://www.babylon.com

33

34 2. APPLET

Alla fine scegliamo Next e apparirà la casella di dialogo riportata nellafigura 2.1.2 diamo un nome al progetto e scegliamo Finish ed il progettoè pronto.

Figura 2.1.2. Creare un applet, passo 2

Per costruire l’applet vero e proprio procediamo come è indicato nellafigura 2.1.3 a fronte, dopo aver eseguito le precedenti istruzioni otteniamoquanto riportato in figura 2.1.4 nella pagina 36

Dopo aver fatto le scelte indicate ed infine premuto sul pulsante Nextotteniamo quanto illustrato nella figura 2.1.5 nella pagina 36

Infine premendo il bottone Finish costruiamo l’applet e l’IDE appariràcome indicato in figura

A questo punto bisogna dire a NetBeans che questo va compilato come unapplet e quindi procediamo come indicato nella figura 2.1.7 nella pagina 38,comparirà allora la finestra di dialogo della figura 2.1.8 nella pagina 39

2.1. INTRODUZIONE AGLI APPLET 35

Figura 2.1.3. Creare un applet - passo 3

36 2. APPLET

Figura 2.1.4. Creare un applet - passo 4

Figura 2.1.5. Creare un applet - passo 5

2.1. INTRODUZIONE AGLI APPLET 37

Figura 2.1.6. L’Ide dopo la creazione dell’applet

38 2. APPLET

Figura 2.1.7. Informazioni per il compilatore - 1

2.1. INTRODUZIONE AGLI APPLET 39

Figura 2.1.8. Informazioni per il compilatore - 2

40 2. APPLET

Abbiamo scritto il nostro applet, per farlo funzionare bisogna costruirlo

scegliendo Build dal menù Run , oppure scegliere l’icona . Se andi-amo nella cartella dove abbiamo memorizzato il progetto, nel nostro casoI:\NetBeans\Progetti\ProgettoApplet (vedi figura 2.1.2 nella pagina 34),

troviamo la cartella , aprendola troveremo i file riportati nellafigura 2.1.9.

Figura 2.1.9. La cartella Dist

Il file più importante della cartella Dist è , il contenuto di questofile è riportato nel listato 2.1 nella pagina successiva. Del listato primacitato noi utilizziamo soltanto queste tre righe:

<applet width="300" height="300"><param name="jnlp_href" value="launch.jnlp"/></applet>

Le due dimensioni width=300 height=300 le dobbiamo adattare alle realidimensioni del nostro applet.

Sul server dove appoggiamo le nostre pagine web dobbiamo riportare l’in-

tera cartella sostituendo il file con la pagina web cheintendiamo pubblicare inserendo in essa le tre righe riportate nella prece-dente casella (righe 11, 12, 13 del listato 2.1 a fronte) nel punto dellapagina in cui vogliamo fare apparire l’applet.

2.1. INTRODUZIONE AGLI APPLET 41

Listato 2.1. File launch.html

1 <!DOCTYPE HTML PUBLIC "−//W3C//DTD␣HTML␣ 4 .01 ␣ T r a n s i t i o n a l //EN">2 <!−− ########################## IMPORTANT NOTE ############################ −−>3 <!−− This p r e v i ew HTML page w i l l work on l y w i th JDK 6 update 10 and h i g h e r ! −−>4 <!−− ######################################################################−−>5 <html>6 <head>7 < t i t l e>Test page f o r l a un ch i n g the a pp l e t v i a JNLP</ t i t l e>8 </head>9 <body>

10 <h3>Test page f o r l a un ch i n g the a pp l e t v i a JNLP</h3>11 <app let width="300" he ight="300">12 <param name=" j n l p_h r e f " va lue=" launch . j n l p "/>13 </ app let>14 <!−− Or use the f o l l o w i n g s c r i p t e l ement to l aunch wi th the Deployment Too l k i t −−>15 <!−− Open the dep l oyJava . j s s c r i p t to v iew i t s documentat ion −−>16 <!−−17 <s c r i p t s r c=" ht tp :// j a v a . com/ j s / dep l oyJava . j s "></ s c r i p t>18 <s c r i p t>19 var a t t r i b u t e s = {20 codebase : [ app let codebase ] ,21 code : [ c l a s s to l aunch ] ,22 a rch i ve : [ JAR f i l e w i th the app let ] ,23 width : [ app let width ] ,24 he ight : [ app let he ight ]25 } ;26 var pa ramete r s = { [ app let pa ramete r s ] } ;27 var v e r s i o n = [JDK v e r s i o n ] ;28 dep loyJava . runApp l e t ( a t t r i b u t e s , parameter s , v e r s i o n ) ;29 </ s c r i p t>30 −−>31 </body>32 </html>

42 2. APPLET

Innanzitutto bisogna osservare che tutte le volte che ricompiliamo il proget-to il file launch.html viene ricostruito, quindi se noi abbiamo apportato adesso delle modifiche verranno cancellate. Per evitare questo aggiungiamo alprogetto un nuovo file di tipo html (come era già stato detto in preceden-za) usando File->New File->Other->Html File , chiamiamo questo filePaginaWeb.html ed in esso ricopiamo le righe:

<applet width="300" height="300"><param name="jnlp_href" value="launch.jnlp"/>

</applet>

del file launch.html, mettendole nella sezione body. Questo file diventeràla nostra pagina html contenente l’applet, deve essere inserito nella cartelladist ed essere ricopiato sul server assieme a tutta la cartella.

Attualmente il nostro applet non fa nulla, cerchiamo di inserire in essodelle funzionalità, in particolare vogliamo che disegni nella sua area uncerchio di dato centro e di dato raggio. Analizziamo il listato del fileNewJApplet.java riportato in 2.2 nella pagina 44

2.1. INTRODUZIONE AGLI APPLET 43

12 import j a v a . awt . G raph i c s ;34 /∗5 ∗ To change t h i s template , choose Too l s | Templates6 ∗ and open the t emp la t e i n the e d i t o r .7 ∗/89 /∗

10 ∗ NewJApplet . j a v a11 ∗12 ∗ Created on 11−d ic −2008 , 13 . 16 . 1313 ∗/1415 /∗∗16 ∗17 ∗ @author To r r e ro G iovann i18 ∗/19 p ub l i c c l a s s NewJApplet extends j a v a x . swing . JApp le t {2021 /∗∗ I n i t i a l i z e s the a pp l e t NewJApplet ∗/22 p ub l i c vo i d i n i t ( ) {23 t r y {24 j a v a . awt . EventQueue . invokeAndWait (new Runnable ( ) {25 p ub l i c vo i d run ( ) {26 i n i tComponent s ( ) ;27 }28 } ) ;29 } catch ( Excep t i on ex ) {30 ex . p r i n t S t a c kT r a c e ( ) ;31 }32 }3334 /∗∗ This method i s c a l l e d from w i t h i n the i n i t ( ) method to35 ∗ i n i t i a l i z e the form .36 ∗ WARNING: Do NOT modi fy t h i s code . The con t en t o f t h i s method i s37 ∗ a lways r e g e n e r a t e d by the Form Ed i t o r .38 ∗/39 @SuppressWarnings ( " unchecked " )40 // <ed i t o r−f o l d d e f a u l t s t a t e="c o l l a p s e d " desc="Generated Code">//GEN−BEGIN : in i tComponent s41 p r i v a t e vo id i n i tComponent s ( ) {4243 org . j d e s k t o p . l a y o u t . GroupLayout l a y o u t = new org . j d e s k t o p . l a y o u t . GroupLayout ( getContentPane ( ) ) ;44 getContentPane ( ) . s e tLayou t ( l a y o u t ) ;45 l a y o u t . s e tHo r i z o n t a lG r oup (46 l a y o u t . c r e a t e P a r a l l e l G r o u p ( org . j d e s k t o p . l a y o u t . GroupLayout . LEADING)47 . add (0 , 400 , Shor t .MAX_VALUE)48 ) ;49 l a y o u t . s e tV e r t i c a l G r o u p (50 l a y o u t . c r e a t e P a r a l l e l G r o u p ( org . j d e s k t o p . l a y o u t . GroupLayout . LEADING)51 . add (0 , 300 , Shor t .MAX_VALUE)52 ) ;

44 2. APPLET

53 }// </ed i t o r−f o l d >//GEN−END: in i tComponent s545556 // V a r i a b l e s d e c l a r a t i o n − do not modi fy //GEN−BEGIN : v a r i a b l e s57 // End o f v a r i a b l e s d e c l a r a t i o n //GEN−END: v a r i a b l e s585960 }

Listato 2.2.

2.1. INTRODUZIONE AGLI APPLET 45

Come si può notare il listato, generato automaticamente, è piuttosto com-plesso, questo è dovuto al fatto che nella figura 2.1.4 nella pagina 36 abbi-amo scelto Swing GUI Forms , se avessimo scelto Java avremmo ottenutola figura 2.1.10

Figura 2.1.10. Costruire un applet semplice

Anche in questo caso bisogna abilitare Web Start come indicato in figu-ra 2.1.7 nella pagina 38 e in figura 2.1.8 nella pagina 39.

Il listato del nuovo applet è riportato in 2.5 nella pagina 49

46 2. APPLET

1 /∗2 ∗ To change t h i s template , choose Too l s | Templates3 ∗ and open the t emp la t e i n the e d i t o r .4 ∗/5

6 import j a v a . a p p l e t . App le t ;7 import j a v a . awt . G raph i c s ;8

9 /∗∗10 ∗11 ∗ @author G iovann i To r r e ro12 ∗/13 pub l i c c l a s s Semp l i c eApp l e t extends App le t {14

15 /∗∗16 ∗ I n i t i a l i z a t i o n method tha t w i l l be c a l l e d a f t e r the a pp l e t i s l oaded17 ∗ i n t o the browse r .18 ∗/19 pub l i c void i n i t ( ) {20 // TODO s t a r t a synch ronous download o f heavy r e s o u r c e s21 }22

23

24

25 // TODO ov e rw r i t e s t a r t ( ) , s top ( ) and d e s t r o y ( ) methods26

27 }

Listato 2.3. File SempliceApplet.java

Affinché l’applet sia in grado di disegnare un cerchio di dato centro e datoraggio è necessario avere un’interfaccia grafica che ci consenta di intro-durre i tre dati richiesti. L’interfaccia per l’immissione e la visualizzazionedei dati in ingresso e in uscita può risiedere nell’applet stesso, in questocaso è meglio usare un applet del tipo JAppletFormn che offre un IDEvisuale per disegnare l’interfaccia, altrimenti l’interfaccia grafica può essereinserita nella pagina html che ospita l’applet usando il linguaggio di scrptingJavaScript per far dialogare il contenuto della pagina html con l’applet stes-so. In quest’ultimo caso l’applet è più semplice deve solo contenere delleproprietà private con i relativi metodi di accesso pubblici in modo da poterintrodurre nell’applet le coordinate del centro del cerchio e il suo raggio.L’applet può scambiare con la pagina soltanto delle stringhe, mentre le co-ordinate del centro e il raggio sono degli interi, quindi le tre proprietà vannoraddoppiate, tre stringhe e tre interi, i tre interi non verranno introdotticome proprietà ma come tre istanze della classe Integer , questa classe rap-presenta un intero ed ammette un costruttore avente un parametro stringa

2.1. INTRODUZIONE AGLI APPLET 47

il quale contiene la rappresentazione del numero da introdurre sotto formadi stringa.

Per disegnare il cerchio usiamo i metodi ereditati dalla classe Applet , lariga 13 del listato 2.5 nella pagina 49 contiene la parola chiave extends checi assicura che SempliceApplet è una estensione della classe Applet . .In particolare dobbiamo richiamare il metodo repaint della classe Applet,il metodo repaint richiama il metodo paint sempre della classe Applet,quest’ultimo metodo va riscritto affinché possa disegnare sulla parte dischermo dedicata all’applet ciò che noi vogliamo.

Mettiamoci dunque all’opera e cominciamo con inserire le proprietà. Épossibile inserire automaticamente le proprietà basta fare click con il tastodestro nel punto in cui si vuole inserire la proprietà, comparirà il menùa discesa riportato in figura 2.1.11, scegliendo Insert Code compariràla finestra di dialogo riportata in figura 2.1.12 nella pagina successiva,scegliamo Add Property... e comparirà la finestra riportata in figura 2.1.13nella pagina seguente, procediamo come indicato in figura e la proprietàverrà inserita.

Figura 2.1.11. Menù per l’inserimento delle proprietà

Listato 2.4.

48 2. APPLET

Figura 2.1.12. Inserire una proprietà - 1

Figura 2.1.13. Inserire una proprietà - 2

Usando il sistema precedentemente descritto inseriamo le tre proprietà cherappresentano le coordinate del centro e il raggio della circonferenza chedobbiamo disegnare (vedere il listato 2.5 nella pagina successiva).

2.1. INTRODUZIONE AGLI APPLET 49

Listato 2.5. File SempliceApplet.java versione definitiva1 /∗2 ∗ To change t h i s template , choose Too l s | Templates3 ∗ and open the t emp la t e i n the e d i t o r .4 ∗/56 import j a v a . a p p l e t . App le t ;7 import j a v a . awt . G raph i c s ;89 /∗∗

10 ∗11 ∗ @author G iovann i To r r e r o12 ∗/13 pub l i c c l a s s Semp l i c eApp l e t extends App le t {1415 /∗∗16 ∗ I n i t i a l i z a t i o n method tha t w i l l be c a l l e d a f t e r the a pp l e t i s l oaded17 ∗ i n t o the b rowse r .18 ∗/19 pub l i c vo id i n i t ( ) {20 // TODO s t a r t a synch ronous download o f heavy r e s o u r c e s21 }2223 @Over r ide24 pub l i c vo id pa i n t ( G raph i c s g ) {25 super . p a i n t ( g ) ;26 I n t e g e r xc = new I n t e g e r ( t h i s . g e tXcen t ro ( ) ) ;27 I n t e g e r yc = new I n t e g e r ( t h i s . g e tYcen t ro ( ) ) ;28 I n t e g e r r = new I n t e g e r ( t h i s . ge tRagg io ( ) ) ;29 g . drawOval ( xc−r , yc−r , 2∗ r , 2∗ r ) ;30 }3132 // TODO ov e rw r i t e s t a r t ( ) , s top ( ) and d e s t r o y ( ) methods3334 p r i v a t e S t r i n g x c en t r o = "100" ;3536 /∗∗37 ∗ Get the v a l u e o f x c en t r o38 ∗39 ∗ @re tu rn the v a l u e o f x c en t r o40 ∗/41 pub l i c S t r i n g ge tXcen t ro ( ) {42 re tu rn x c en t r o ;43 }4445 /∗∗46 ∗ Set the v a l u e o f x c en t r o47 ∗48 ∗ @param xc en t r o new va l u e o f x c en t r o49 ∗/50 pub l i c vo id s e tXc en t r o ( S t r i n g x c en t r o ) {51 t h i s . x c en t r o = xc en t r o ;52 }5354 p r i v a t e S t r i n g Ycent ro = "100" ;5556 /∗∗

50 2. APPLET

57 ∗ Get the v a l u e o f Ycent ro58 ∗59 ∗ @re tu rn the v a l u e o f Ycent ro60 ∗/61 pub l i c S t r i n g ge tYcen t ro ( ) {62 re tu rn Ycentro ;63 }6465 /∗∗66 ∗ Set the v a l u e o f Ycent ro67 ∗68 ∗ @param Ycentro new va l u e o f Ycent ro69 ∗/70 pub l i c vo id s e tYc en t r o ( S t r i n g Ycent ro ) {71 t h i s . Ycent ro = Ycentro ;72 }7374 p r i v a t e S t r i n g Raggio = "50" ;7576 /∗∗77 ∗ Get the v a l u e o f Raggio78 ∗79 ∗ @re tu rn the v a l u e o f Raggio80 ∗/81 pub l i c S t r i n g getRagg io ( ) {82 re tu rn Raggio ;83 }8485 /∗∗86 ∗ Set the v a l u e o f Raggio87 ∗88 ∗ @param Raggio new va l u e o f Raggio89 ∗/90 pub l i c vo id s e tRagg i o ( S t r i n g Raggio ) {91 t h i s . Raggio = Raggio ;92 }93949596 }

2.1. INTRODUZIONE AGLI APPLET 51

Cominciamo ad analizzare il listato 2.5 nella pagina 49, tralasciando icommenti alla riga 6 incontriamo:

import java.applet.Applet;

con questa istruzione importiamo, cioè possiamo usare, la classe Applet ,la quale si trova nel sotto package applet del package java. I package sonodelle cartelle gestite automaticamente dalla macchina virtuale di Java.

Analogo significato ha la riga successiva.

I commenti del tipo

/**** @author Giovanni Torrero

*/

servono al programma Javadoc per generare la documentazione del codicescritto.

Arriviamo alla riga

public class SempliceApplet extends Applet {

public significa che tutte le proprietà e metodi pubblici2 della classe sonoaccessibili dal resto del progetto oppure in eventuali progetti che impor-tassero questa classe.

class è la parola chiave da usare tutte le volte che si dichiara una classe,SempliceApplet è il nome della classe, extends Applet significa che lanostra classe estende la classe Applet che abbiamo precedentemente im-portato, è questo il modo con cui Java implementa l’ereditarietà. Unaclasse può estendere una sola altra classe, non è ammessa l’ereditarietàmultipla.

Il successivo metodo init è prodotto automaticamente da NetBeans e perora lo lasciamo vuoto.

Arriviamo così all’importantissimo metodo

@Overridepublic void paint(Graphics g) {

super.paint(g);Integer xc = new Integer(this.getXcentro());Integer yc = new Integer(this.getYcentro());Integer r = new Integer(this.getRaggio());g.drawOval(xc-r, yc-r, 2*r, 2*r);

2I metodi e le proprietà pubbliche sono quelle che sono state dichiarate usando ilmodificatore di accesso public

52 2. APPLET

}

Paint è un metodo ereditato dalla classe Applet che qui abbiamo riscritto,riscrivere un metodo della super-classe significa farne l’ override , ogni i-stanza (oggetto) della nuova classe richiamerà il metodo riscritto, mentreuna istanza della super-classe richiamerà il metodo non riscritto. NetBeansfa automaticamente l’override dei metodi della super classe basta sceglierenella figura 2.1.12 nella pagina 48 Override Method anziché Add Property.

Nelle righe successive si procede all’incapsulamento delle tre proprietà cherappresentano i dati della classe, le tre proprietà vengono dichiarate conil modificatore di accesso private , che limita l’accesso a queste proprietàsoltanto dall’interno della classe3 vengono poi forniti due metodi pubbliciuno per accedere al valore della proprietà e l’altro per modificare tale valore.

Bisogna poi scrivere la pagina Web che fornisce l’interfaccia per immetterei tre dati , coordinate del centro e raggio, nell’applet. Per costruire questapagina si può usare NetBeans scegliendo:

File -> New File -> Other -> HTML File

Il listato è il risultato finale riguardante la pagina Web che ospita l’applet

Listato 2.6. File PaginaWeb.html

1 <!−−2 To change t h i s template , choose Too l s | Templates3 and open the t emp la t e i n the e d i t o r .4 −−>5 <!DOCTYPE HTML PUBLIC "−//W3C//DTD␣HTML␣ 4 .01 ␣ T r a n s i t i o n a l //EN">6 <html>7 <head>8 < t i t l e></ t i t l e>9 <meta http−equ i v="Content−Type" content=" t e x t / html ; ␣ c h a r s e t=UTF−8">

10 <s c r i p t l anguage=" J a v aS c r i p t ">11 f u n c t i o n p r e p a r a p p l e t ( ){12 document . aa . s e tRagg i o ( forma . r a g g i o . v a l u e )13 document . aa . s e tXcen t r o ( forma . x c en t r o . v a l u e )14 document . aa . s e tYcen t r o ( forma . y c en t r o . v a l u e )15 document . aa . r e p a i n t ( )16 }17 </ s c r i p t>18 </head>19 <body>20 <h3>App le t</h3>21 <br>22 <form name=" forma">23 Raggio . . . <i nput type=" t e x t " name=" r a gg i o " va lue="100" s i z e="10" /> <br>24 X cen t r o <i nput type=" t e x t " name=" xc en t r o " va lue="150" s i z e="10" /><br>25 Y cen t r o <i nput type=" t e x t " name=" yc en t r o " va lue="100" s i z e="10" />26 <i nput type="button " va lue=" d i s e gna " name=" d i s " onc l i c k=" p r e p a r a p p l e t ( ) " />

3Cioè soltanto dal codice compreso tra le due parentesi graffe che racchiudono ilcorpo della classe.

2.1. INTRODUZIONE AGLI APPLET 53

27 </ form>28 <br>2930 <app let name="aa" width="300" he ight="300">31 <param name=" j n l p_h r e f " va lue=" launch . j n l p "/>32 </ app let>33 </body>34 </html>

54 2. APPLET

Per scrivere il listato 2.6 nella pagina 52 bisogna avere una discreta conoscen-za di HTML e Java Script, innanzitutto bisogna copiare dal file launch.html 2.1nella pagina 41 le tre righe 11,12,13 e aggiungerle alla pagina generata au-tomaticamente da NetBeans, nella stessa pagina inseriamo un form met-tendoci dentro tre campi di testo e un bottone, codice compreso tra la riga22 e la riga 27, infine gestiamo la pressione del bottone con la funzione JavaScript preparapplet() .Della funzione preparapplet() analizziamo soltantola riga 12 e la riga 15. La riga 12

document.aa.setRaggio(forma.raggio.value)

richiama l’oggetto document che è la pagina web attuale, contenuto indocument vi è l’oggetto aa che è il nome che abbiamo dato al nostroapplet, dell’applet richiamiamo il metodo setRaggio passandogli comeparametro forma.raggio.value , che è il valore della casella di testo raggiocontenuta nel form forma . Nella riga 15

document.aa.repaint()

viene richiamato il metodo repaint dell’applet aa contenuto in document,repaint ripulisce l’area dell’applet e poi chiama paint che la ridisegna.

Indice analitico

default, 30

import, 51incapsulamento, 29

JavaScript, 46

macchina virtuale, 51metodi, 21metodi di accesso, 46metodi ereditati, 47metodo, 29modificatore di accesso, 51, 52

new, 29

package, 51proprietà, 21, 29proprietà private, 46protected, 30pubblic, 30

sottopackage, 51

55

Bibliografia

[1] Claudio De-Sio-Cesari. Manuale di Java 6. HOEPLI, Via Hoepli 5, 20121 Milano(Italy), 2006.

57