Vediamo l'interfaccia utente grafica dell'esempio che verra' poi usato nell'esame. Per adesso vediamo quella per l'utente abbonato.
L'interfaccia grafica per l'utente abbonato e' composta da una finestra che chiede l'autenticazione (login) e da altre due finestre, rispettivamente per mostrare i dati relativi all'utente stesso come abbonato, e per cambiare la password.
Tutte le finestre dell'interfaccia sono finestre di dialogo. Infatti nessuna di queste ha la prevalenza sulle altre quanto a durata dell'interazione con l'utente.
Inizialmente compare la finestra di login
che chiede cognome, nome, anno di nascita e password dell'utente.
Questa finestra pur essendo una finestra di dialogo non dipende da
altre finestre.
Vi sono tre bottoni corrispondenti alle operazioni possibili:
Se l'utente sceglie "accedi" allora il programma controlla che cognome, nome, anno di nascita e password corrispondano a quelli di un abbonato nel data base. In caso di errore mostra una finestra col messaggio di errore. In caso ok carica l'abbonato e lo mostra nella finestra di dati.
Se l'utente sceglie "cambia password" allora il programma controlla che cognome, nome, anno di nascita e password corrispondano a quelli di un abbonato nel data base. In caso di errore mostra una finestra col messaggio di errore. In caso ok mostra la finestra di cambio password.
Vi sono tre bottoni corrispondenti alle operazioni possibili:
La finestra di cambio password chiede all'utente la nuova password, due volte per essere sicuri da eventuali errori di battitura.
Vi sono due bottoni corrispondenti alle operazioni possibili:
Il diagramma seguente illustra il funzionamento dell'interfaccia.
I riquadri rettangolari sono finestre.
Le frecce sono azioni eseguite dall'utente nella finestra da cui la
freccia parte.
I riquadri con angoli arrotondati sono operazioni fatte dal programma in
risposta all'azione dell'utente.
Non sono indicate nel diagramma le finestre di errore...
Tutte le finestre sono realizzate con la classe Finestra, sotto-classe di JDialog.
Le finestre di questa classe sono gestite con border layout. Sono predisposte con al centro lo spazio per mettere un componente (in pratica sara' un pannello), e in basso un pannello organizzato con flow layout che contiene il bottone "chiudi", ma predisposto per aggiungere altri bottoni. Queste finestre sono modali.
Vi sono poi classi che realizzano i pannelli che saranno collocati al centro delle finestre, e definiscono quali bottoni aggiuntivi vi saranno:
Le finestre vengono costruite cosi':
Tutte le classi che costituiscono questo esempio sono predisposte per essere documentate con Javadoc (vedere lezione 11). Scaricare tutti i file java nella directory corrente e poi digitare "javadoc *.java", genera documentazione per tutte le classi, il file da cui partire (con l'indice) e' poi quello di nome "index.html".
Qui diamo solo un inquadramento generale delle classi, a che cosa servono, che collegamenti hanno fra loro. Per tutti gli altri dettagli si rimanda alla documentazione javadoc.
Le classi per il data base sono descritte nella lezione 12, qui documentiamo solo quelle per l'interfaccia grafica (che usano le precedenti).
Realizza tutte le finestre.
Definisce il layout a border, lascia la parte al centro vuota (ma definisce
la funzione mettiInCentro con cui la potro' riempire), mette a sud un
pannello con per adesso solo il bottone "chiudi" (ma definisce la funzione
mettiInBasso con cui ne potro' aggiungere altri).
Queste due funzioni mettiInCentro e mettiInBasso sono chiamate dalla
classe principale ProgrammaAbbonato
per costruire effettivamente le finestre
(tutte di classe Finestra ma con
elemento diverso al centro e diversi bottoni nel pannello in basso).
Realizza il pannello che sara' collocato al centro della finestra di login.
Organizzato a griglia 4x2 con 4 etichette esplicative e
campi di testo di cui l'ultimo oscurato (classe JPasswordField),
per cognome, nome, anno di nascita, password.
Crea e memorizza i bottoni aggiuntivi "accedi" e "cambia" (senza
metterli ancora da nessuna parte, sono da mettere poi nella finestra).
Ha due metodi per ritornare i dati personali e la password (immessi dall'utente nei campi di testo).
Realizza il pannello che sara' collocato al centro della finestra di cambio password.
Organizzato a griglia 2x2 con 2 etichette esplicative e campi di testo
oscurati per le due copie della nuova password.
Crea e memorizza il bottone aggiuntivo "conferma cambio" (da mettere poi
nella finestra).
Ha un metodo che controlla se la nuova password e' stata immessa correttamente, e in caso affermativo la ritorna.
Pannello per contenere i dati di una coppia persona, abbonamento
(oggetto di classe InfoBase).
Super-classe qui di PannelloDati, e nell'interfaccia grafica
per il gestore (ved. prossima lezione) dei pannelli
incaricati di raccogliere i parametri di ricerca, mostrare
gli abbonati risultanti dalla ricerca, chiedere i dati per la creazione di
un nuovo abbonato.
Contiene (oltre ad etichette esplicative)
campi di testo per ognuna delle informazioni associate alla persona
titolare e al suo abbonamento,
eccetto che per la categoria di abbonamento, rappresentata da
tre bottoni radio.
Tuttavia i bottoni radio non sono ancora resi mutuamente esclusivi
(aggiungendoli allo stesso button group).
Nelle sotto-classi alcuni campi saranno disabilitati per impedire
all'utente di cambiarne il contenuto.
Crea e memorizza i bottoni aggiuntivi "salva" e "ricarica" (da mettere poi
nella finestra).
Ha funzioni per scrivere nel pannello i dati di un oggetto di classe InfoBase, per prelevare dal pannello i dati e restituirli come oggetto di classe InfoBase, e per cancellare i campi del pannello (ma solo quelli corrispondenti alle informazioni che l'utente puo' editare, in base allo stato delle abilitazioni).
Sotto-classe di PannelloInfo, realizza il pannello che sara' collocato al centro della finestra di dati.
Rende tutti i campi di testo non editabili tranne quelli per
indirizzo, telefono ed email, e disabilita i tre bottoni radio.
Crea inoltre e memorizza i bottoni "salva" e "ricarica".
Super-classe delle due interfacce grafiche per l'utente abbonato (che stiamo vedendo qui) e per l'utente gestore (che vedremo nella prossima lezione.
Tutti gli attributi e i metodi di questa classe delle due sotto-classi sono di classe (static). L'idea e' che tanto ci sara' un solo programma in esecuzione, quindi non siamo interessati a creare piu' istanze.
Memorizza come attributo l'utente (dichiarato come di classe Utente, ma sara' un oggetto della sotto-classe UtenteAbbonato o UtenteGestore).
Definisce funzioni per alcune operazioni che dovranno essere fatte sia nell'interfaccia per l'utente abbonato che in quella per l'utente gestore. Queste operazioni hanno come parametri una finestra f di classe Finestra e un pannello p di classe PannelloInfo: lavorano sull'abbonato correntemente selezionato nell'utente sotto-stante, le cui informazioni sono mostrate nel pannello p, ed eventuali errori sono mostrati in una finestra di errore che dipende dalla finestra f.
Precisamente sono definite funzioni per:
Sotto-classe di Programma, realizza tutta l'interfaccia grafica per l'utente abbonato.
Costruisce le tre finestre: ciascuna e' un'istanza di Finestra con al centro un pannello della classe opportuna, e con in basso aggiunti i bottoni memorizzati in tale pannello.
Stabilisce tutte le callback di tutti i bottoni presenti nelle tre finestre: il bottone "chiudi" memorizzato nella finestra e i bottoni aggiuntivi memorizzati nei vari pannelli (ma aggiunti alla finestra).
Servono:
Per compilate e' sufficiente digitare: javac ProgrammaAbbonato.java
Per eseguire digitare: java ProgrammaAbbonato Pippo