Spiegazione Programma phone

Post on 17-May-2015

612 views 1 download

description

come fare un applicazione javame

Transcript of Spiegazione Programma phone

Lezione del Prof. Silvano Natalizimaggio 2009Java cellulari

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

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

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

Diagramma delle classi della interfaccia utente

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

La classe Form

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

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.

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 !

La Form che vogliamo ottenere

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

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

ANY);

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

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

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

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

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

bottone per il cellulare

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

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)

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

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.

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

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.

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

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.

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.

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.

Another Command Example (Two Forms)

Launch

Exit

Exit

2nd Form

Go to First Form

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

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

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

Fine della seconda parte

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

Per aggiungere i comandi nella form

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

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

Lanciando il programma :

Comando per uscire

Comando per inserire i dati

Settare l’ascolto dei comandi

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

domandeStoria.setCommandListener(this);

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

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

commandAction(…)

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

Apertura del RecordStore try {

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

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

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