Spiegazione Programma phone
-
Upload
silvano-natalizi-itis-alessandro-volta-perugia -
Category
Education
-
view
612 -
download
1
description
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(); }