Scritto di Interfacce Utente - Giugno 2003
Parte pratica
NOTA:
quando si chiede di scrivere pseudo-codice
NON e' necessario usare la sintassi Java, anzi
si puo' anche scrivere in linguaggio naturale, PURCHE'
emergano chiaramente le singole
istruzioni (non condensare piu' istruzioni in una sola frase di linguaggio
naturale), la loro semantica (dare alle funzioni nomi di fantasia purche'
denotino chiaramente il lavoro svolto dalla funzione),
le informazioni passate come argomenti e quelle
ritornate come risultato.
Contesto generale per tutti gli esercizi
Consideriamo un'interfaccia che consiste in una finestra top-level
con
- un'area grafica (pannello)
- un bottone posto sotto il pannello ed
etichettato "chiudi poligono".
- uno slider collocato in posizione verticale a destra del
pannello
- due etichette collocate sopra e sotto lo slider,
con le scritte "chiaro" e "scuro".
Si veda la figura:
+-----------------------------------+---------+
| | scuro |
| | ^ |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | === |
| | | |
| | | |
+-----------------------------------+ v |
| chiudi poligono | chiaro |
+-----------------------------------+---------+
Il pannello grafico e' destinato ad accogliere il disegno di un poligono.
L'utente disegna il poligono cliccando nei punti
dove vuole che siano posizionati i vertici.
Come feedback gli viene mostrata una spezzata poligonale aperta
che collega i vertici nell'ordine in cui sono stati cliccati.
Il bottone "chiudi poligono" e' attivo solo se c'e' una spezzata con
almeno 3 vertici.
Quando l'utente aziona il bottone "chiudi poligono"
la spezzata poligonale si chiude formando cosi' un poligono.
Adesso, non appena l'utente clicchera' un nuovo punto, il poligono
corrente sparira' ed iniziera' a formarsi un nuovo poligono,
con le stesse modalita' di prima.
La spezzata poligonale (aperta o chiusa che sia)
e' disegnata in nero.
L'interno del poligono delimitato dalla spezzata (se questa e' chiusa)
e' riempito in rosso.
Lo slider serve a controllare l'intensita' del colore di riempimento del
poligono (tonalita' di rosso piu' chiara o piu' scura).
Il nostro programma ha le seguenti variabili che ne descrivono lo
stato corrente:
-
Un contatore num che memorizza il numero di
vertici della spezzata poligonale (aperta o chiusa che sia).
-
Due array x e y che contengono le coordinate
(x,y) dei vertici della spezzata.
Per 0 <= i < num
le coordinate dell'i-esimo vertice si trovano in
x[i] ed y[i].
Assumiamo che tali array siano "abbastanza grandi" per qualunque poligono
l'utente voglia disegnare.
-
Un booleano isClosed che vale true se la spezzata e' chiusa
e false altrimenti.
-
Un numero intero saturation che contiene il valore corrente
dello slider, tra 0 e 255.
Inizialmente, num=0, isClosed=false,
saturation=0.
Esercizio 1
(punti 4 indicativamente)
Quale gerarchia di annidamento e quali layout
manager si possono usare per ottenere questa configurazione?
Corredare la spiegazione con un disegno.
Esercizio 2
(punti 6 indicativamente)
Scrivere lo pseudo-codice della
funzione di disegno per ottenere il disegno voluto,
in base alle variabili di stato descritte sopra.
Esercizio 3
(punti 6 indicativamente)
Dire quali callback (o event listener in Java)
sono necessari per ottenere il comportamento voluto.
Spiegare per ciascuno di essi:
- a quale componente e' associato
- in seguito a che tipo di evento scatta
- che cosa fa, in particolare dire se e come modifica le
variabili di stato del programma