Dopo aver sfruttato i componenti grafici di alto livello, vediamo come poter aumentare il grado di personalizzazione delle nostre applicazioni disegnandone le varie schermate.
In questo ambito, è fondamentale considerare le differenti caratteristiche offerte dai display, dei vari terminali, come ad esempio le dimensioni, i colori, ecc. e trovare il modo di scrivere il minor numero possibile di versioni di codice, anche se l'applicazione deve essere portabile su più telefoni cellulari.
Tale problema non si presenta, invece, nell'uso della grafica di alto livello, che nasconde questa complessità, grazie all'implementazione che ciascun produttore ha fornito per i vari componenti standard (Form, List, TextBox, ecc.).
L'oggetto principale: Canvas
Il disegno di una schermata inizia con l'implementazione di un oggetto che estenda la classe astratta Canvas.
Una classe di questo tipo può:
- essere utilizzata come
CommandListener
analogamente ai componenti grafici di alto livello; - essere utilizzata per catturare gli eventi che caratterizzano l'attività dell'utente sulla tastiera (o su qualsiasi oggetto di puntamento supportato come, ad esempio, il pennino di uno smartphone, tipo Motorola A1000).
Il secondo punto può essere soddisfatto tramite l'override dei seguenti metodi:
protected void keyPressed(int kCode)
– invocato se un tasto (identificato da kCode) è premuto e rilasciato;protected void keyReleased(int kCode)
– invocato se un tasto è rilasciato;protected void keyRepeated(int kCode)
– invocato se un tasto è premuto ripetutamente;protected void pointerPressed(int x, int y)
– se il puntatore viene premuto nella posizione di coordinate (x,y);protected void pointerDragged(int x, int y)
– se il puntatore viene trascinato dalla posizione di coordinate (x,y);protected void pointerReleased(int x, int y)
– se il puntatore è rilasciato nel punto di coordinate (x,y).
Il disegno di una schermata avviene, invece, attraverso i metodi paint
e repaint()
: quest'ultimo deve essere richiamato quando il nostro canvas ha subito delle modifiche e deve essere ridisegnato tutto o in parte.
Per comprendere meglio l'uso di questi strumenti realizziamo un applicazione che, su uno sfondo blu, inserisce un'immagine e, alla pressione di uno dei tasti numerici, visualizza quale numero abbiamo premuto.
L'utilizzo della cartella resources
Supponiamo di aver creato dal WTK un progetto chiamato CanvasDemo: per poter utilizzare immagini nella nostra midlet dovremo inserirle nella cartella res che si trova in {WTK_HOME}/CanvasDemo/.
Il formato standard che J2ME supporta per le immagini è PNG (Portable Network Graphics).
Inseriamo nella directory res di CanvasDemo il file tramonto.png.
Questa cartella è valida per tutti i file (immagini e non) che devono essere poi usati dalla relativa applicazione.