Spiegazione Programma phone

815 views

Published on

come fare un applicazione javame

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
815
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Spiegazione Programma phone

  1. 1. Lezione del Prof. Silvano Natalizi maggio 2009 Java cellulari
  2. 2. Specifica del programma <ul><li>Si vogliono memorizzare nel cellulare </li></ul><ul><ul><li>alcune domande di storia </li></ul></ul><ul><ul><li>con le relative risposte </li></ul></ul><ul><ul><li>Si vuole visualizzare tutto l’elenco delle domande </li></ul></ul><ul><ul><li>Su richiesta dell’utente cliccando su di una domanda si vuole visualizzare la risposta </li></ul></ul>
  3. 3. Inserimento dei dati <ul><li>Anzitutto occorre memorizzare le domande di storia, una ad una. </li></ul><ul><li>Conviene anche memorizzare per ciascuna domanda la sua risposta corretta </li></ul><ul><li>A questo scopo creiamo un oggetto RecordStore con due stringhe di caratteri al suo interno, una per la domanda e l’altra per la risposta </li></ul>
  4. 4. Form per l’inserimento dei dati <ul><li>Occorre definire una Form con due caselle di testo per inserire i dati nel RecordStore </li></ul><ul><li>Per inserire i dati di input occorre definire una interfaccia utente </li></ul><ul><li>USER INTERFACE (UI) </li></ul><ul><li>La Form è un metodo per definire una interfaccia utente </li></ul><ul><li>La classe Form si trova nel package: </li></ul><ul><ul><li>Javax.microedition.lcdui: </li></ul></ul><ul><ul><ul><li>Limited Capability Device User Interface </li></ul></ul></ul>
  5. 5. Diagramma delle classi della interfaccia utente
  6. 6. Che cosa è una Form ? <ul><li>La Form è come un coltelletto svizzero, versatile, utile </li></ul><ul><li>È simile alle finestre di windows </li></ul><ul><li>Si possono aggiungere ad essa degli items (componenti) per creare una interfaccia utente personalizzata </li></ul><ul><li>LCDUI è piena di items, tutti discendenti dalla classe Item </li></ul><ul><li>Noi usiamo la casella di testo TextField </li></ul>
  7. 7. La classe Form
  8. 8. Display class <ul><li>La classe Display fornisce il fondamento per una interazione visuale con un programmi MIDlet </li></ul><ul><li>Può esserci una ed una sola istanza della classe Display in un programma MIDlet </li></ul><ul><li>L’oggetto Display ci permette di comunicare con il dispositivo e di fornire un contesto nel quale visualizzare i componenti dello schermo </li></ul>
  9. 9. Un oggetto di tipo Display <ul><li>Per ottenere un oggetto Display, si usa il metodo statico getDisplay() </li></ul><ul><li>Questo metodo restituisce un oggetto di tipo Display </li></ul><ul><li>Display display=Display.getDisplay(this); </li></ul><ul><ul><li>La parolachiave (this) identifica l’oggetto corrente della classe MIDlet. </li></ul></ul>
  10. 10. Codice per costruire la Form <ul><li>Il costruttore public Form(String titolo) permette di instanziare un oggetto Form con un titolo: </li></ul><ul><ul><li>Form domandeStoria=new Form(“Domande di Storia”); </li></ul></ul><ul><li>Il metodo </li></ul><ul><ul><li>display.setCurrent(domandeStoria); </li></ul></ul><ul><ul><li>Permette di visualizzare questa finestra nello schermo del cellulare. E’ un metodo della classe Display, infatti agisce sull’oggetto display restituito precedentemente da getDisplay ! </li></ul></ul>
  11. 11. La Form che vogliamo ottenere
  12. 12. Casella di testo <ul><li>Per inserire delle caselle di testo per l’inserimento dei dati della domanda e della risposta, si usa un oggetto della classe TextField </li></ul><ul><li>TextField domanda=new TextField(…); </li></ul><ul><li>C ostruttore per il TextField: </li></ul><ul><ul><li>TextField(String label, String text, int maxSize, int constraints) </li></ul></ul><ul><ul><ul><li>Label: etichetta </li></ul></ul></ul><ul><ul><ul><li>text: testo iniziale </li></ul></ul></ul><ul><ul><ul><li>maxSize: massima lunghezza del testo </li></ul></ul></ul><ul><ul><ul><li>Constraints: tipo di dato digitabile (NUMERIC,DECIMAL,ANY,...) </li></ul></ul></ul>
  13. 13. Come creare una casella di testo <ul><li>domanda=newTextField(&quot;domanda:&quot;,&quot;&quot;,100,TextField.ANY); </li></ul><ul><li>risposta= newTextField(&quot;risposta:&quot;,&quot;&quot;,100,TextField.ANY); </li></ul>
  14. 14. Per aggiungere le caselle di testo alla form <ul><li>Per aggiungere le caselle di testo alla form si usa il metodo della form append(…): </li></ul><ul><ul><li>domandeStoria.append(domanda); </li></ul></ul><ul><ul><li>domandeStoria.append(risposta); </li></ul></ul>
  15. 15. Riepilogo del codice che visualizza una form <ul><li>import javax.microedition.midlet.*; </li></ul><ul><li>import javax.microedition.lcdui.*; </li></ul><ul><li>/** </li></ul><ul><li>* @author Aspire M5500 </li></ul><ul><li>*/ </li></ul><ul><li>public class DomandeStoria extends MIDlet { </li></ul><ul><li>private Display display; </li></ul><ul><li>private Form domandeStoria; </li></ul><ul><li>private TextField domanda; </li></ul><ul><li>private TextField risposta; </li></ul><ul><li>public DomandeStoria(){ </li></ul><ul><li>domandeStoria=new Form(&quot;Domande di Storia&quot;); </li></ul><ul><li>domanda=new TextField(&quot;domanda:&quot;,&quot;&quot;,100,TextField.ANY); </li></ul><ul><li>risposta=new TextField(&quot;risposta:&quot;,&quot;&quot;,100,TextField.ANY); </li></ul><ul><li>domandeStoria.append(domanda); </li></ul><ul><li>domandeStoria.append(risposta); </li></ul><ul><li>} </li></ul><ul><li>public void startApp() { </li></ul><ul><li>display=Display.getDisplay(this); </li></ul><ul><li>display.setCurrent(domandeStoria); </li></ul><ul><li>} </li></ul><ul><li>public void pauseApp() { </li></ul><ul><li>} </li></ul><ul><li>public void destroyApp(boolean unconditional) { </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  16. 16. Fine della prima parte <ul><li>Abbiamo costruito la form </li></ul><ul><li>Abbiamo aggiunto alcune caselle di testo </li></ul><ul><li>Abbiamo visualizzato </li></ul><ul><li>Possiamo digitare i nostri dati </li></ul><ul><li>Tuttavia il programma fatto non ha dei comandi né il codice per elaborare questi dati </li></ul><ul><li>Pertanto il passo successivo da fare è quello di inserire dei comandi che permettano ad esempio di memorizzare questi dati in un RecordStore </li></ul>
  17. 17. Creare un bottone per memorizzare i dati <ul><li>La classe Command permette di creare un bottone per il cellulare </li></ul>
  18. 20. Come può il programma exit? <ul><li>Per fornire un modo per uscire dal programma, occorre usare un comando exit() </li></ul><ul><li>Un comando è come un bottone , ha un titolo, come &quot;OK&quot; or &quot;Cancel,&quot; </li></ul><ul><li>e la vostra applicazione può rispondere ad esso in maniera appropriata, quando l’utente invoca il comando </li></ul>
  19. 21. Event Handling with Command s <ul><li>Displayable, the parent of all screen displays, supports Commands . </li></ul><ul><li>Si possono aggiungere o togliere comandi con i seguenti metodi: </li></ul><ul><ul><li>public void addCommand(Command cmd) </li></ul></ul><ul><ul><li>public void removeCommand(Command cmd) </li></ul></ul>
  20. 22. Command O bjects <ul><li>In J2ME, commands sono comunemente rappresentati con soft-buttons neldevice. Il seguente diagramma mostra due Command objects, uno con l’etichetta &quot;Exit&quot; e l’altro con &quot;View.&quot; </li></ul>soft-buttons
  21. 23. Command O bjects <ul><li>Se ci sono troppi comandi sul display, un device creerà un menù per mostrare i comandi multipli. Il seguente diagramma mostra come può apparire. </li></ul>
  22. 24. Use Command objects <ul><li>Gli step basici per elaborare degli eventi con un oggetto Command sono: </li></ul><ul><ul><li>Creare un Command object. </li></ul></ul><ul><ul><li>Add the Command to a Form (or other GUI objects TextBox, List, or Canvas ) . </li></ul></ul><ul><ul><li>Creare and set a listener (ascolto) for the Form. </li></ul></ul><ul><li>Quando un evento è rilevato, il listener chiamerà il metodo commandAction(). </li></ul>
  23. 25. Creare un Command <ul><li>Per creare un Command, bisogna fornire una label , un type, e una priority. </li></ul>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.
  24. 26. Create a Command <ul><li>Per creare uno standard OK command, ad esempio, si deve fare: </li></ul><ul><ul><li>Command c = new Command(&quot;OK&quot;, Command.OK, 0); </li></ul></ul><ul><li>Per creare un comando specifico all’applicazione, si deve fare: </li></ul><ul><ul><li>Command c = new Command( </li></ul></ul><ul><ul><li>&quot;Launch&quot;, Command.SCREEN, 0); </li></ul></ul>label type priority
  25. 27. P riority <ul><li>Ogni comando ha una priorità. </li></ul><ul><li>Numeri più bassi indicano maggiore priorità. </li></ul><ul><li>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. </li></ul>
  26. 28. Responding to Commands <ul><li>I comandi sono mostrati nello schermo, ma niente accade automaticamente quando un utente invoca un comando </li></ul><ul><li>dovete creare un oggetto listener che sarà chiamato when the user invokes any command in a Displayable. </li></ul><ul><li>The listener is an object that implements the CommandListener interface. </li></ul><ul><li>To register the listener with a Displayable, use the following method: </li></ul><ul><ul><li>public void setListener (CommandListener l) </li></ul></ul><ul><li>Note it is one Listener per Displayable, NOT one Listener per one Command. </li></ul>
  27. 29. Example <ul><li>import javax.microedition.midlet.*; </li></ul><ul><li>import javax.microedition.lcdui.*; </li></ul><ul><li>public class Commander extends MIDlet implements CommandListener { </li></ul><ul><li>public void startApp() { </li></ul><ul><li>Displayable d = new Form( &quot;Test Command&quot; ); </li></ul><ul><li>Command c = new Command(&quot;Exit&quot;, Command.EXIT, 0); </li></ul><ul><li>d.addCommand(c); </li></ul><ul><li>d.setCommandListener(this); </li></ul><ul><li>Display.getDisplay(this).setCurrent(d); </li></ul><ul><li>} </li></ul><ul><li>public void pauseApp() { } </li></ul><ul><li>public void destroyApp(boolean unconditional) { } </li></ul><ul><li>public void commandAction ( Command c, Displayable s) { </li></ul><ul><li>notifyDestroyed(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Abstract method of CommandListener. Will be called when any command in the Form is selected.
  28. 31. Another Command Example (Two Forms) Launch Exit Exit 2nd Form Go to First Form
  29. 32. Another Command Example (Two Forms) <ul><li>import javax.microedition.lcdui.*; </li></ul><ul><li>import javax.microedition.midlet.*; </li></ul><ul><li>public class Commander2 extends MIDlet implements CommandListener { </li></ul><ul><li>Display display = null; </li></ul><ul><li>Form f1 = null; </li></ul><ul><li>Form f2 = null; </li></ul><ul><li>// command </li></ul><ul><li>Command firstFormCommand = </li></ul><ul><li> new Command(&quot;1st Form&quot;, &quot;Go to First Form&quot;, Command.SCREEN, 0); </li></ul><ul><li>Command secondFormCommand = </li></ul><ul><li> new Command(&quot;2nd Form&quot;, &quot;Go to Second Form&quot;, Command.SCREEN, 0); </li></ul><ul><li>Command exitCommand = </li></ul><ul><li> new Command(&quot;Exit&quot;, Command.EXIT, 1); </li></ul>
  30. 33. Another Command Example (Two Forms) <ul><li>public void startApp() { </li></ul><ul><li>display = Display.getDisplay(this); </li></ul><ul><li>f1 = new Form( &quot;Form 1&quot; ); </li></ul><ul><li>f1.append( &quot;This is Form No. 1&quot; ); </li></ul><ul><li>f1.addCommand(secondFormCommand); </li></ul><ul><li>f1.addCommand(exitCommand); </li></ul><ul><li>f1.setCommandListener(this); </li></ul><ul><li>f2 = new Form( &quot;Form 2&quot; ); </li></ul><ul><li>f2.append( &quot;This is Form No. 2&quot; ); </li></ul><ul><li>f2.addCommand(firstFormCommand); </li></ul><ul><li>f2.addCommand(exitCommand); </li></ul><ul><li>f2.setCommandListener(this); </li></ul><ul><li>display.setCurrent( f1 ); </li></ul><ul><li>} </li></ul>
  31. 34. Another Command Example (Two Forms) <ul><li>public void pauseApp() { </li></ul><ul><li>} </li></ul><ul><li>public void destroyApp(boolean unconditional) { </li></ul><ul><li>} </li></ul><ul><li>public void commandAction(Command c, Displayable d) { </li></ul><ul><li>String label = c.getLabel(); </li></ul><ul><li>if (label.equals(&quot;Exit&quot;)) { </li></ul><ul><li>notifyDestroyed(); </li></ul><ul><li>} else if (label.equals(&quot;1st Form&quot;)) { </li></ul><ul><li>Display.getDisplay(this).setCurrent( f1 ); </li></ul><ul><li>} else { </li></ul><ul><li>Display.getDisplay(this).setCurrent( f2 ); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  32. 35. Fine della seconda parte
  33. 36. Ora inseriamo i comandi nella nostra applicazione <ul><li>Definiamo due variabili di tipo Command, l’una per uscire dall’applicazione, l’altra per aggiungere i dati digitati al RecordStore </li></ul><ul><li>Command uscire; </li></ul><ul><li>Command inserire; </li></ul><ul><li>Ora istanziamo i due comandi: </li></ul><ul><li>uscire=new Command(“Quit”,Command.Exit,0); </li></ul><ul><li>Inserire=new Command(“Add”,Command.SCREEN,1); </li></ul>
  34. 37. Per aggiungere i comandi nella form <ul><li>Per aggiungere i comandi nella form si usa il metodo addCommand(…) </li></ul><ul><li>domandeStoria.addCommand(uscire); </li></ul><ul><li>domandeStoria.addCommand(inserire); </li></ul>
  35. 38. Lanciando il programma : Comando per uscire Comando per inserire i dati
  36. 39. Settare l’ascolto dei comandi <ul><li>Anzitutto va inserito l’ascolto (un orecchio) del comando </li></ul><ul><li>domandeStoria.setCommandListener(this); </li></ul>
  37. 40. Dare ai comandi un lavoro da fare <ul><li>public void commandAction(Command c, Displayable s){ </li></ul><ul><li>if (c==uscire){ </li></ul><ul><li>destroyApp(true); </li></ul><ul><li>notifyDestroyed(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>Occorre implementare il metodo commandAction(…) </li></ul>
  38. 41. Il lavoro di inserimento dati <ul><li>if (c==inserire){ </li></ul><ul><li>str=domanda.getString() + &quot;:&quot; + risposta.getString(); </li></ul><ul><li>dati=str.getBytes(); </li></ul><ul><li>try { </li></ul><ul><li>numRec=rs.addRecord(dati,0,dati.length); </li></ul><ul><li>} </li></ul><ul><li>catch (Exception exc){ </li></ul><ul><li>exc.printStackTrace(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  39. 42. Apertura del RecordStore <ul><li>try { </li></ul><ul><li>rs=RecordStore.openRecordStore(&quot;domandeStoria&quot;, true); </li></ul><ul><li>} </li></ul><ul><li>catch(Exception exc){ </li></ul><ul><li>exc.printStackTrace(); </li></ul><ul><li>} </li></ul>
  40. 43. Chiusura del RecordStore <ul><li>try { </li></ul><ul><li>rs.closeRecordStore(); </li></ul><ul><li>} </li></ul><ul><li>catch (Exception exc){ </li></ul><ul><li>exc.printStackTrace(); </li></ul><ul><li>} </li></ul>

×