spiegazione programma phone

43
Lezione del Prof. Silvano Natalizi maggio 2009 Java cellulari

Upload: silvano-natalizi-itis-alessandro-volta-perugia

Post on 17-May-2015

613 views

Category:

Education


1 download

DESCRIPTION

come fare un applicazione javame

TRANSCRIPT

Page 1: Spiegazione Programma phone

Lezione del Prof. Silvano Natalizimaggio 2009Java cellulari

Page 2: Spiegazione Programma phone

Specifica del programmaSi vogliono memorizzare nel cellulare

alcune domande di storiacon le relative risposteSi vuole visualizzare tutto l’elenco delle

domandeSu richiesta dell’utente cliccando su di una

domanda si vuole visualizzare la risposta

Page 3: Spiegazione Programma phone

Inserimento dei datiAnzitutto occorre memorizzare le domande di

storia, una ad una.Conviene anche memorizzare per ciascuna

domanda la sua risposta correttaA questo scopo creiamo un oggetto

RecordStore con due stringhe di caratteri al suo interno, una per la domanda e l’altra per la risposta

Page 4: Spiegazione Programma phone

Form per l’inserimento dei datiOccorre definire una Form con due caselle di

testo per inserire i dati nel RecordStorePer inserire i dati di input occorre definire

una interfaccia utenteUSER INTERFACE (UI)La Form è un metodo per definire una

interfaccia utenteLa classe Form si trova nel package:

Javax.microedition.lcdui: Limited Capability Device User Interface

Page 5: Spiegazione Programma phone

Diagramma delle classi della interfaccia utente

Page 6: Spiegazione Programma phone

Che cosa è una Form ?La Form è come un coltelletto svizzero,

versatile, utileÈ simile alle finestre di windowsSi possono aggiungere ad essa degli items

(componenti) per creare una interfaccia utente personalizzata

LCDUI è piena di items, tutti discendenti dalla classe Item

Noi usiamo la casella di testo TextField

Page 7: Spiegazione Programma phone

La classe Form

Page 8: Spiegazione Programma phone

Display classLa classe Display fornisce il fondamento per

una interazione visuale con un programmi MIDlet

Può esserci una ed una sola istanza della classe Display in un programma MIDlet

L’oggetto Display ci permette di comunicare con il dispositivo e di fornire un contesto nel quale visualizzare i componenti dello schermo

Page 9: Spiegazione Programma phone

Un oggetto di tipo DisplayPer ottenere un oggetto Display, si usa il

metodo statico getDisplay()Questo metodo restituisce un oggetto di tipo

DisplayDisplay display=Display.getDisplay(this);

La parolachiave (this) identifica l’oggetto corrente della classe MIDlet.

Page 10: Spiegazione Programma phone

Codice per costruire la FormIl costruttore public Form(String titolo) permette

di instanziare un oggetto Form con un titolo:Form domandeStoria=new Form(“Domande di

Storia”);Il metodo

display.setCurrent(domandeStoria);

Permette di visualizzare questa finestra nello schermo del cellulare. E’ un metodo della classe Display, infatti agisce sull’oggetto display restituito precedentemente da getDisplay !

Page 11: Spiegazione Programma phone

La Form che vogliamo ottenere

Page 12: Spiegazione Programma phone

Casella di testoPer inserire delle caselle di testo per

l’inserimento dei dati della domanda e della risposta, si usa un oggetto della classe TextField

TextField domanda=new TextField(…);Costruttore per il TextField:

TextField(String label, String text, int maxSize, int constraints) Label: etichetta text: testo iniziale maxSize: massima lunghezza del testo Constraints: tipo di dato digitabile

(NUMERIC,DECIMAL,ANY,...)

Page 13: Spiegazione Programma phone

Come creare una casella di testodomanda=newTextField("domanda:","",100,TextField.

ANY);

risposta= newTextField("risposta:","",100,TextField.ANY);

Page 14: Spiegazione Programma phone

Per aggiungere le caselle di testo alla form

Per aggiungere le caselle di testo alla form si usa il metodo della form append(…):

domandeStoria.append(domanda);domandeStoria.append(risposta);

Page 15: Spiegazione Programma phone

Riepilogo del codice che visualizza una form

import javax.microedition.midlet.*; import javax.microedition.lcdui.*;

/** * @author Aspire M5500 */ public class DomandeStoria extends MIDlet { private Display display; private Form domandeStoria; private TextField domanda; private TextField risposta; public DomandeStoria(){ domandeStoria=new Form("Domande di Storia"); domanda=new TextField("domanda:","",100,TextField.ANY); risposta=new TextField("risposta:","",100,TextField.ANY); domandeStoria.append(domanda); domandeStoria.append(risposta); } public void startApp() { display=Display.getDisplay(this); display.setCurrent(domandeStoria); }

public void pauseApp() { }

public void destroyApp(boolean unconditional) { } }

Page 16: Spiegazione Programma phone

Fine della prima parteAbbiamo costruito la formAbbiamo aggiunto alcune caselle di testoAbbiamo visualizzato Possiamo digitare i nostri datiTuttavia il programma fatto non ha dei

comandi né il codice per elaborare questi datiPertanto il passo successivo da fare è quello

di inserire dei comandi che permettano ad esempio di memorizzare questi dati in un RecordStore

Page 17: Spiegazione Programma phone

Creare un bottone per memorizzare i datiLa classe Command permette di creare un

bottone per il cellulare

Page 18: Spiegazione Programma phone
Page 19: Spiegazione Programma phone
Page 20: Spiegazione Programma phone

Come può il programma exit?

Per fornire un modo per uscire dal programma, occorre usare un comando exit()

Un comando è come un bottone, ha un titolo, come "OK" or "Cancel,"

e la vostra applicazione può rispondere ad esso in maniera appropriata, quando l’utente invoca il comando

Page 21: Spiegazione Programma phone

Event Handling with CommandsDisplayable, the parent of all screen displays,

supports Commands.

Si possono aggiungere o togliere comandi con i seguenti metodi: public void addCommand(Command cmd)public void removeCommand(Command cmd)

Page 22: Spiegazione Programma phone

Command ObjectsIn J2ME, commands sono comunemente

rappresentati con soft-buttons neldevice. Il seguente diagramma mostra due Command objects, uno con l’etichetta "Exit" e l’altro con "View."

soft-buttons

Page 23: Spiegazione Programma phone

Command ObjectsSe ci sono troppi comandi sul display, un

device creerà un menù per mostrare i comandi multipli. Il seguente diagramma mostra come può apparire.

Page 24: Spiegazione Programma phone

Use Command objects

Gli step basici per elaborare degli eventi con un oggetto Command sono:1. Creare un Command object.2. Add the Command to a Form (or other GUI

objects TextBox, List, or Canvas).3. Creare and set a listener (ascolto) for the

Form. Quando un evento è rilevato, il listener

chiamerà il metodo commandAction().

Page 25: Spiegazione Programma phone

Creare un Command

Per creare un Command, bisogna fornire una label, un type, e una priority.

Command Meaning

BACK returns to the previous screen.

CANCEL standard negative answer to a dialog

EXIT for exiting from the application.

HELP a request for on-line help.

ITEM specific to the items of the Screen or the elements of a Choice.

OK standard positive answer to a dialog

SCREEN an application-defined command

STOP A command that will stop some currently running process, operation, etc.

Page 26: Spiegazione Programma phone

Create a CommandPer creare uno standard OK command, ad

esempio, si deve fare: Command c = new Command("OK",

Command.OK, 0);

Per creare un comando specifico all’applicazione, si deve fare:Command c = new Command(

"Launch", Command.SCREEN, 0);

labeltype priority

Page 27: Spiegazione Programma phone

PriorityOgni comando ha una priorità. Numeri più bassi indicano maggiore priorità. se aggiungi un command con priority 0, poi

altri con priority 1, la priority 0 command sarà mostrato nello schermo direttamente. Gli altri comandi finiranno in un menù secondario.

Page 28: Spiegazione Programma phone

Responding to CommandsI comandi sono mostrati nello schermo, ma niente

accade automaticamente quando un utente invoca un comando

dovete creare un oggetto listener che sarà chiamato when the user invokes any command in a Displayable.

The listener is an object that implements the CommandListener interface.

To register the listener with a Displayable, use the following method:public void setListener(CommandListener l)

Note it is one Listener per Displayable, NOT one Listener per one Command.

Page 29: Spiegazione Programma phone

Exampleimport javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class Commander extends MIDlet implements CommandListener { public void startApp() { Displayable d = new Form( "Test Command" ); Command c = new Command("Exit", Command.EXIT, 0); d.addCommand(c); d.setCommandListener(this); Display.getDisplay(this).setCurrent(d); }

public void pauseApp() { } public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable s) { notifyDestroyed(); }} Abstract method of

CommandListener. Will be called when any command in the Form is selected.

Page 30: Spiegazione Programma phone
Page 31: Spiegazione Programma phone

Another Command Example (Two Forms)

Launch

Exit

Exit

2nd Form

Go to First Form

Page 32: Spiegazione Programma phone

Another Command Example (Two Forms)import javax.microedition.lcdui.*;import javax.microedition.midlet.*;

public class Commander2 extends MIDlet implements CommandListener { Display display = null; Form f1 = null; Form f2 = null;

// command Command firstFormCommand =

new Command("1st Form", "Go to First Form", Command.SCREEN, 0); Command secondFormCommand =

new Command("2nd Form", "Go to Second Form", Command.SCREEN, 0); Command exitCommand =

new Command("Exit", Command.EXIT, 1);

Page 33: Spiegazione Programma phone

Another Command Example (Two Forms)

public void startApp() { display = Display.getDisplay(this);

f1 = new Form( "Form 1" ); f1.append( "This is Form No. 1" ); f1.addCommand(secondFormCommand); f1.addCommand(exitCommand); f1.setCommandListener(this);

f2 = new Form( "Form 2" ); f2.append( "This is Form No. 2" ); f2.addCommand(firstFormCommand); f2.addCommand(exitCommand); f2.setCommandListener(this);

display.setCurrent( f1 ); }

Page 34: Spiegazione Programma phone

Another Command Example (Two Forms)

public void pauseApp() { }

public void destroyApp(boolean unconditional) { }

public void commandAction(Command c, Displayable d) { String label = c.getLabel(); if (label.equals("Exit")) { notifyDestroyed(); } else if (label.equals("1st Form")) { Display.getDisplay(this).setCurrent( f1 ); } else { Display.getDisplay(this).setCurrent( f2 ); } }}

Page 35: Spiegazione Programma phone

Fine della seconda parte

Page 36: Spiegazione Programma phone

Ora inseriamo i comandi nella nostra applicazioneDefiniamo due variabili di tipo Command,

l’una per uscire dall’applicazione, l’altra per aggiungere i dati digitati al RecordStore

Command uscire;Command inserire;Ora istanziamo i due comandi:uscire=new

Command(“Quit”,Command.Exit,0);Inserire=new

Command(“Add”,Command.SCREEN,1);

Page 37: Spiegazione Programma phone

Per aggiungere i comandi nella form

Per aggiungere i comandi nella form si usa il metodo addCommand(…)

domandeStoria.addCommand(uscire);domandeStoria.addCommand(inserire);

Page 38: Spiegazione Programma phone

Lanciando il programma :

Comando per uscire

Comando per inserire i dati

Page 39: Spiegazione Programma phone

Settare l’ascolto dei comandi

Anzitutto va inserito l’ascolto (un orecchio) del comando

domandeStoria.setCommandListener(this);

Page 40: Spiegazione Programma phone

Dare ai comandi un lavoro da farepublic void commandAction(Command c,

Displayable s){ if (c==uscire){ destroyApp(true); notifyDestroyed(); } }Occorre implementare il metodo

commandAction(…)

Page 41: Spiegazione Programma phone

Il lavoro di inserimento dati if (c==inserire){ str=domanda.getString() + ":" +

risposta.getString(); dati=str.getBytes(); try { numRec=rs.addRecord(dati,0,dati.length); } catch (Exception exc){ exc.printStackTrace(); } }

Page 42: Spiegazione Programma phone

Apertura del RecordStore try {

rs=RecordStore.openRecordStore("domandeStoria", true);

} catch(Exception exc){ exc.printStackTrace(); }

Page 43: Spiegazione Programma phone

Chiusura del RecordStoretry { rs.closeRecordStore(); } catch (Exception exc){ exc.printStackTrace(); }