Una interfaccia grafica e' costituita da:
Finestra = area rettangolare dello schermo che funge da area di input/output indipendente.
Finestra ha un bordo gestito dal sistema (es. da Windows), contenente dispositivi di controllo per chiusura, iconificazione, redimensionamento ecc., e un interno gestito dall' applicazione a cui la finestra appartiene.
Dispositivi o componenti = oggetti con proprio aspetto grafico e comportamento (capacita' di reagire a sollecitazioni) che permettono interazione con l'utente.
Esempi: bottoni, menu', campi di input testuale...
Il flusso di esecuzione di un programma e' la sequenza di istruzioni che vengono eseguite quando lo si lancia.
Nei programmi senza interfaccia grafica (detti anche programmi "batch") il flusso e' predefinito nel codice (si eseguono le istruzioni della funzione "main").
Invece, il comportamento di un programma con interfaccia grafica e' inter-attivo.
Sono le azioni compiute dell'utente sui dispositivi di input a determinare il flusso di esecuzione del programma.
Il programma raccoglie le azioni e scatena le reazioni corrispondenti.
+------+ azione su +------------+ | |--(1)--> dispositivo --(2)--> evento --->| (3) | | | di input | | |utente| |applicazione| | | feedback su reazione | | | |<--(5)-- dispositivi <--(4)-- (cambio <---| | +------+ di output di stato) +------------+
(1) L'utente compie azioni sui dispositivi di input (mouse, tastiera).
(2) Le azioni sono tradotte in eventi. Evento = pacchetto di informazioni che descrivono che cosa e' avvenuto.
(3) In base all'evento l'applicazione decide che cosa fare (come reagire). La reazione "cambia qualcosa" nello stato dell'applicazione...
(4) La reazione (avvenuto cambio di stato) viene comunicata all'utente come feedback / riscontro sui disposiviti di output (schermo, altoparlante).
(5) In base al feedback, l'utente decidera' la prossima azione...
Un programma con interfaccia grafica viene scritto usando una libreria o toolkit per sviluppo di interfacce. Per Esempio nel linguaggio Java ne esistono due: Java AWT (Abstract Window Toolkit), Java Swing.
La libreria fornisce classi di dispositivi / componenti di interfaccia.
Ciascuna classe corrisponde a un tipo di componente con proprie caratteristiche di aspetto / comportamento. Le caratteristiche sono in parte personalizzabili. E' possibile inserire comportamenti aggiuntivi.
Esempio: un bottone e' un'area rettangolare sensibile al click del mouse. Posso personalizzarlo scegliendo dimensioni, colore, font della scritta... Ha predefinito il comportamento di evidenziarsi quando viene cliccato. Posso aggiungere quello di chiamare una certa funzione applicativa (es. salvare il file corrente).
Meccanismo per associare comportamenti aggiuntivi ai dispositivi / componenti di interfaccia.
Callback = funzione "da chiamare in risposta" a un evento che accade su un certo componente di interfaccia.
La libreria compila una tabella di associazioni dispositivo - evento - callback.
La libreria esegue ciclo infinito in cui ad ogni giro:
I dispositivi forniti da una libreria / toolkit
si classificano in diversi tipi o classi,
ciascun tipo con certe caratteristiche di aspetto / comportamento.
Nella terminologia Java i dispositivi si chiamano "componenti".
Compomenti attivi = sensibili a input:
Elementi inerti = solo aspetto grafico:
Aree dedicate a scopi speciali: aree grafiche, aree per visualizzazione o editing di testi...
I contenitori servono a strutturare lo spazio della finestra.
Definiscono vincoli per la disposizione (layout) dei componenti
all'interno di un contenitore.
Un contenitore puo' contenere altri contenitori...
meccanismo a "scatole cinesi": gerarchia di annidamento
dei contenitori.
Anche le finestre sono contenitori (contenitori top-level).
Esempio: la finestra e' divisa in due parti verticalmente, nella parte sinistra c'e' un'area di testo, la parte destra e' strutturata come una griglia 3 righe x 3 colonne con dentro dei bottoni.
+--------------------+----+----+----+ | | B1 | B2 | B3 | | +----+----+----+ | area di testo | B4 | B5 | B6 | | +----+----+----+ | | B7 | B8 | B9 | +--------------------+----+----+----+La gerarchia e':
contenitore a due scomparti verticali est/ovest | +----------+----------+ | | area di testo contenitore a griglia 3x3 | +-----+-----+ | ... | bottone B1 ... bottone B9
Dal punto di vista dell'utente, un dispositivo / componente di interfaccia e' caratterizzato da:
Dal punto di vista del programmatore un componente e' caratterizzato da:
Quando su un componente di interfaccia avviene un evento, il toolkit lo puo' gestire come:
Voce della tendina di un menu':
Campo testuale (per l'immissione di una stringa di testo):