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 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:

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: